导航:首页 > 操作系统 > 松翰单片机程序

松翰单片机程序

发布时间:2023-07-24 06:44:36

❶ 小弟初识松翰单片机,现用sn8p2711,编写了一个PWM调光的程序。

TC0C是定时器自身计数用的当然不能赋值,如果想调整占空比只有对TC0R赋值。规格书上写得很清楚:
PWM 信号输出到 PWM0OUT ( P5.4 引脚), TC0OUT 和 ALOAD0 标志位控制 PWM 输出的阶数( 256 、 64 、 32
和 16 )。 8 位计数器 TC0C 计数过程中不断与 TC0R 相比较,当 TC0C 计数到两者相等时, PWM 输出低电平,当 TC0C
再次从零开始计数时, PWM 被强制输出高电平。 PWM0 输出占空比 = TC0R/ 计数量程 (计数量程 = 256 、 64 、 32 或 16 ) 。
参考寄存器保持输入 00H 可使 PWM 的输出长时间维持在低电平,通过修改 TC0R 可改变 PWM 输出占空比。

❷ 松翰单片机,如何用汇编进行位定义

1、如果你是要定义一个位变量的话。一般,我们都先定义一个字节:‘XXX
DS
1’;这个条语句表示定义一个字节,然后,们再定义想要的位变量。比如:‘getdata_flag
equ
xxx.0’。这样我们就定义了一个位变量,如果你还想定义一个位变量,那么你可以再加一条语句:‘getdata_flag
equ
xxx.1’。依此类推。你就可以定义8个位变量。要是你还觉得不够用的话,你可以归以上的做法,再定义一个字节,然后再定义另外8个位变量。
2、如果你是想用一个位来代替I/O口的某一个位的话,你可以直接用:‘YYY
EQU
P1.x’或‘YYY
EQU
P2.x’就可以了。
3、如果你想用一个位代替寄存器的某一位的话,其做法和2当中是一样的。例如:‘zzz
EQU
GIE’。

❸ 松翰单片机SN8P2711A产生pwm程序,急

给个51单片机的给你参考下

*---------------
文件名称: PWM.C
功能 :单片机脉冲方式产生PWM信号
----------------*/
#include <reg52.h> // 引用标准库的头文件
#include <absacc.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define COUNT0 XBYTE [0X0000] // 8254计数器0寄存器地址
#define COUNT1 XBYTE [0X0200] // 8254计数器1寄存器地址
#define COUNT2 XBYTE [0X0400] // 8254计数器2寄存器地址
#define COMWORD XBYTE [0X0600] // 8254控制寄存器地址

/********************************
函数名称: SIGNAL(SIG_OUTPUT_COMPARE1A)
功能 :定时器0中断子程序
入口参数:无
返回值 :无
********************************/
void time0_int () interrupt 1 using 1
{
TR0=0; // 关闭T0
TH0=-(20000/256);
TL0=-(20000%256); //重置20ms计数值
/*--------------用8254计数器发送第一路的PWM信号-----------*/
COMWORD=0x30; //1MHz时钟作为计数时钟,计数1000次后实现1ms高电平
COUNT0=0xE0;
COUNT1=0x03;
/*--------------用8254发送第二路的PWM信号----------------*/
COMWORD=0x70; //1MHz时钟作为计数时钟,计数2000次后实现2ms高电平
COUNT0=0xD0;
COUNT1=0x07;
/*-------------用8254发送第三路的PWM信号----------------*/
COMWORD=0xB0;//1MHz时钟作为计数时钟,计数3000次后实现32ms高电平
COUNT0=0xB0;
COUNT1=0x0B;
TR0=1; //启动T0
}
//主函数
void main ()
{
EA=1; // 开CPU总中断
ET0=1; // 开T0定时器中断
TMOD=0x01; // 开定时器中断
TH0=-(20000/256); //20ms定时器计数初值
TL0=-(20000%256);
/*--------------向8254控制寄存器选择计数器0,并对其赋值0-----------------*/
COMWORD=0x30;
COUNT0=0; //赋低位字节
COUNT0=0; //赋高位字节
/*---------------向8254控制寄存器选择计数器1,并对其赋值0------------------*/
COMWORD=0x70;
COUNT0=0; //赋低位字节
COUNT0=0; //赋高位字节
/*---------------向8254控制寄存器选择计数器2,并对其赋值0-----------------*/
COMWORD=0xB0;
COUNT0=0; //赋低位字节
COUNT0=0; //赋高位字节
TR0=1; //启动定时器0
While (1); //无限次循环
}

❹ 松翰单片机汇编实现控制一个LED灯闪烁SOS求救信号。

led_scan260:
upto led_count,26,led_scan90 ;;
bts0 f_led_change ;;
jmp $+4 ;;
bclr led_1 ;;
bset f_led_change ;;
jmp led_scan90 ;;
bset led_1 ;;
bclr f_led_change ;;
upto led_change,3,led_scan90 ;;
bclr f_led_260ms ;;
bset f_led_50ms ;;
ret
led_scan50:
upto led_count1,5,led_scan90 ;;
bts0 f_led_change1 ;;
jmp $+4 ;;
bclr led_1 ;;
bset f_led_change1 ;;
jmp led_scan90 ;;
bset led_1 ;;
bclr f_led_change1 ;;
upto led_change,16,led_scan90 ;;
; bclr f_led_260ms ;;
bclr f_led_50ms ;;
bset f_led_360ms ;;

这是一个亮260MS 闪烁后 50MS闪烁 ,的程序 ,和你的要求差不多 我也是刚学松翰单片机 ,希望多多交流 后面是360MS的闪烁程序

❺ 松翰单片机:SN8P2711A,SN8P2501B可以用C语言来写程序吗用什么编译

可以。
有专门的编译器,在官网下载,www.sonix.com.cn。
最新的版本是SN8_C_Studio_V144。

❻ 松翰单片机C程序FOR循环调试出错

不应该出现这种情况的,可能是你仿真时单步执行操作有误或者其他问题(比如编译器本身),你可以验证一下延时时间长短来查看具体情况,比如a=10000时如果延时约10秒证明没有什么问题,如果如你所说可能延时就只有一二十毫秒的话就肯定有问题了。

阅读全文

与松翰单片机程序相关的资料

热点内容
android滑动进度条 浏览:834
javagmt转换 浏览:826
linux查看snmp 浏览:24
ug80车床编程 浏览:516
怎么加速python计算素数 浏览:241
腰椎第五节压缩性骨折 浏览:91
程序员开会的句子 浏览:993
用哪个app写编程 浏览:645
android通讯录增删改查 浏览:731
车贷解压过户可以同时进行吗 浏览:921
java面向对象编程题目 浏览:884
二次元压缩包 浏览:701
stc仿真器编程器 浏览:155
服务器销售怎么做好 浏览:88
什么是com编程 浏览:850
算法工程师最新资讯 浏览:613
邮政银行卡怎么在app签约绑定 浏览:51
压缩卷一直转 浏览:978
初一编程小程序怎么做 浏览:828
bt软件文件夹名称 浏览:159