完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
为什么我用这段程序想输出周期10ms的方波,仿真的出来差不多11.5ms为什么误差这么大,问题出在哪,下面是程序和电路(晶振12M,仿真软件默认连接)。
|
|
相关推荐
10个回答
|
|
给个参考程序:
#include #if(1) int count = 0; ***it output = P1^0; void initialize() { TMOD|=0X02; TH0=0x9c; TL0=0x9c; TR0=1;//也可以到用时才启动 ET0=1; EA = 1; /*ET0 = 1;//定时器中断打开 TMOD = 0x01;//定时器工作方式 01-16位 TR0 = 1;//启动定时器0 TH0 = 0xFF;//0xFF;// TL0 = 0xff;//0x9C 0xAA;//定时器初值(100us)*/ } int main (void) { initialize(); while(1) { if(count <= 100) { if(count <= 50) output = 1; else output = 0; } else count = 0; } } void timer0() interrupt 1 { count++;//计数 //TH0 = 0xFF;//0xFF;// //TL0 = 0x9C;//0xAA;//重置定时器初值(100us) } #endif |
|
1 条评论
|
|
如果用方式2怎么去计数呢
|
|
|
|
13这个是100hz,有一点点误差,16是1000hz,周期和占空比就完全乱了这是为啥
|
|
|
|
这里你是设置1us中断一次:
void initialize( void ) { EA = 1; EX0 = 1; EX1 = 1;//外部中断开启 IT0 = 1; IT1 = 1;//设置外部中断触发方式 ET0 = 1;//定时器中断打开 //TR0 = 1;//启动定时器0 TMOD = 0x02;//定时器工作方式 TH0 = 0x9C;//0xFF;// TL0 = 0x9C;// } 这里你中断一次记一个数: void timer0() interrupt 1 { count++;//计数 } 这里根据计数输出波形: void out() { TR0 = 1; if(count <= Time) { if(count <= Time1) output = 1; else output = 0; } else count = 1; display(); } 你中断是1us间隔,不是100us间隔,你程序没有看懂。 |
|
2 条评论
|
|
实际测了一下中断间隔是10us不是原来说1us,我指的是这个间隔太短,会影响程序运行。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
726 浏览 0 评论
777 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
680 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1149 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1120 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11800 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 05:33 , Processed in 0.687475 second(s), Total 102, Slave 84 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号