完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
利用定时器2产生3MHz脉冲,程序如下,但是用示波器测试频率是600khz,不知什么问题,请高手指教!!
#include #define uchar unsigned char #define uint unsigned int ***it pwm=P0^6; ***it en1=P0^0; ***it en2=P0^1; void sysclock_init() { OSCICN = 0x87; } void gpio_init() { P1MDIN = 0xB7; P0MDOUT = 0xFF; P1SKIP = 0x48; XBR1 = 0x40; } //----------------------------------------------------------------------------- // 定时器2产生3mkhz的方波 //----------------------------------------------------------------------------- void C8051F410_timer2_Init (void) { CKCON = 0x10; TMR2RLL = 0xC3; TMR2RLH = 0xFF; TMR2L = 0xC3; TMR2H = 0xFF; } //----------------------------------------------------------------------------- // 定时器2中断程序,每次产生方波翻转 //----------------------------------------------------------------------------- void C8051F410_Timer2_ISR(void) interrupt 5 { pwm=~pwm; //翻转输出方波200khz } void main() { PCA0MD&=0xBF;//关看门狗 sysclock_init(); gpio_init(); C8051F410_Timer2_Init (); EA=1; TR2=1;// //开定时器2 ET2=1; while(1); } |
|
相关推荐
8个回答
|
|
去单片机版块吧。
|
|
|
|
|
|
|
|
|
|
|
|
pca 的端口不能随意指定,定时器是16位自动重载的,应该可以产生啊
|
|
|
|
void C8051F410_Timer2_Init (void)
{ CKCON = 0x10; TMR2RLL = 0xC3; TMR2RLH = 0xFF; TMR2L = 0xC3; TMR2H = 0xFF; ***************** 你这设置值不是出200K吗,何来出3M? |
|
|
|
谢谢,关于pca 好像只能按照优先级来分配端口,比如说p0.0端口被其他功能占用,那么pca的CEX0才会分配到p0.1端口,这样按顺序进行,假如想直接分配给p0.6这样能实现吗?
|
|
|
|
3M,周期0.33us,机器周期0.0408us,中断从产生到LCALL至少10个完整机器周期,那么这时就是是0.408us了,还不算中断ISR执行,所以呀,楼主你的这个愿望不能实现!
|
|
|
|
跳到0.6,期间的引脚还有其他的功能,只好改板了,谢谢大家!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 00:29 , Processed in 0.897724 second(s), Total 86, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号