| 是我智障了,没开中断,现在有个新问题麻烦大佬们在解答一下,我用串口助手发送1然后单片机打印SUBF是12544这是什么原因呢 |
本帖最后由 番茄拌牛肉 于 2021-4-10 15:26 编辑 jjjjjjir 发表于 2021-4-10 08:24 我智障了,但是打开中断之后,我从串口助手发送字符1然后单片机接收到SBUF的是12544,请问这是什么原因呢 |
|
串口1打印程序 可以打印3个十六位的变量 波特率9600 http://www.51hei.com/bbs/dpj-201660-1.html 串口发送 不需要while死等 串口接收执行软件复位 http://www.51hei.com/bbs/dpj-200927-1.html |
|
/********************************** 包含头文件 **********************************/ #include "motor_zhiliu.h" #include "uart.h" /********************************** 变量定义 **********************************/ uchar led_light = 0; //计数 uchar light = 0; //灯亮的参数->0-10 /********************************** 函数定义 **********************************/ /**** *******定时器0初使化函数 *****/ void Init_timer(void) { // TMOD &= 0xF0; //清零 T0 的控制位 TMOD |= 0x01; //配置 T0 为模式 1 TH0 = (65535-1000)/256; //配置 T0 重载值 TL0 = (65535-1000)%256; //初值等于重载值 TR0 = 1; //启动 T0 ET0 = 1; //启动 T0 中断 EA = 1; //打开总中断 in1 = 0; in2 = 0; } /**** *******T1计时中断函数 1s的定时次数= 1/(12/11059200)=921600,16位计数器最大可计数65536次,所以通常定时ms为单位,比如定时50ms,则循环20次为1s,则计数次数为921600/20=46080,则初值为 TH1 = (65535-46080)/256; //重新赋初值 TL1 = (65535-46080)%256; *****/ void Time0(void) interrupt 1 //3:为定时器1的中断号; 1:定时器0的中断号; 0:外部中断1的中断号; 2 外部中断2的中断号; 4 串口中断的中断号; { TH0 = (65535-1000)/256; //重新赋初值 TL0 = (65535-1000)%256; led_light ++; if(led_light <= light) { in1 = 1; in2 = 0; } else if(led_light < 10) { in1 = 0; in2 = 0; } else { led_light =0; in1 = 0; in2 = 0; } } |
| 温湿度请忽略 |