完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
本帖最后由 puptong 于 2016-5-6 09:10 编辑
用的是STC的单片机,串口波特率是使用独立发生器的,然后想用定时器0和定时器1分别做延时,也就是定时器0 一个延时,定时器1一个延时,下面是初始化代码,以及定时器延时代码, 问题是定时器0 的延时正确,但是定时器1的延时就不对了。问下这是什么原因。void UART_Init(void) { PCON &= 0x7F; //波特率不倍速 SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T BRT = 0xDC; //设定独立波特率发生器重装值0xdc AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器 AUXR |= 0x10; //启动独立波特率发生器 EA=1; //打开所有中断 ES=1; //使能串口接收中断, } void timer0_Init(void) //1毫秒@11.0592MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 16位 TL0 = 0x66; //设置定时初值 TH0 = 0xfc; //设置定时初值 1ms TF0 = 0; //清除TF0标志 TR0 = 0; //定时器0 no 开始计时 ET0 = 0; // 1使能定时器0中断 } void Timer1_Init(void) //1毫秒@11.0592MHz { AUXR &= 0xBF; //定时器时钟12T模式 TMOD &= 0x0F; //设置定时器模式 TMOD |= 0x10; //设置定时器模式 16位 TL0 = 0x66; //设置定时初值 TH0 = 0xfc; //设置定时初值 1ms TF1 = 0; //清除TF0标志 TR1 = 0; //定时器0 no 开始计时 ET1 = 0; // 1使能定时器0中断 } void tm0_isr() interrupt 1 using 1 { TL0 = 0x66; //设置定时初值 TH0 = 0xFc; //设置定时初值 timer0_cont_tem++; if(timer0_cont_tem>=500) { TR0 = 0; ET0 = 0; flag_1=1; timer0_cont_tem=0; } } void tm1_isr() interrupt 3 using 1 { TL0 = 0x66; //设置定时初值 TH0 = 0xFc; //设置定时初值 timer1_cont_tem++; if(timer1_cont_tem>=500) { TR1=0; ET1=0; timer1_cont_tem=0; flag_2=1; } } 定时器1的延时调试出来不为500MS,而且误差很大。 |
|
相关推荐
4个回答
|
|
定时器1的初始化和中断里的TH0和TL0改为TH1和TL1,另外把using1去掉
最佳答案
|
|
|
|
把串口关了试试,是不是串口的问题
|
|
|
|
还是你心细,我写的时候为了方便直接复制了定时器0的代码改的,结果没改寄存器,谢谢,现在解决了,还是要细心啊 |
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
《DNESP32S3使用指南-IDF版_V1.6》第三十章 DHT11数字温湿度传感器
122 浏览 0 评论
565 浏览 0 评论
【敏矽微ME32G070开发板免费体验】之原厂2812测试例程解析
772 浏览 0 评论
948 浏览 2 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
658 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12041 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-26 18:47 , Processed in 0.699679 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号