完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
利用T0 计数 T1定时 测量PWM频率
求指点,我的这个程序计数有问题 他最大显示不超过256 各位大神求指点 而且PWM驱动本来没问题,不知为啥跟他放一块 就没输出了 PWM输出口 P2.5,P2.6,P2.7 #include"reg51.h" #include"PWM.c" #define uint unsigned int #define uchar unsigned char ***it P3_0 = P3^0; //***it P3_2 = P3^2; uchar time = 0,count = 0; unsigned int HZ = 0; code uchar LED[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89}; void delay(uint x) { while(x--); } void time_init_0(void)interrupt 1 //T0用于计数 方式1 { TH0 = 0; TL0 = 0; count++; } void time_init_1(void)interrupt 3 //T1定时器 方式1 { TH1 = (65536 - 4000)/256; TL1 = (65536 - 4000)%256; time++; if(time >= 250) //1秒到 { HZ = count * 65536 + (TH0 >>8)*256 + TL0; time = 0; count = 0; } } void display() { uchar cp; P0 = 0xff; switch(cp) { case 0:P3_0 = 0;P3_0 = 1;P0 = 0x01;P3_0 = 0;P0 = LED[ HZ%10];break; case 1:P3_0 = 0;P3_0 = 1;P0 = 0x02;P3_0 = 0;P0 = LED[(HZ/10)%10];break; case 2:P3_0 = 0;P3_0 = 1;P0 = 0x04;P3_0 = 0;P0 = LED[(HZ/100)%10];break; case 3:P3_0 = 0;P3_0 = 1;P0 = 0x08;P3_0 = 0;P0 = LED[(HZ/1000)%10];break; case 4:P3_0 = 0;P3_0 = 1;P0 = 0x10;P3_0 = 0;P0 = LED[(HZ/10000)%10];break; case 5:P3_0 = 0;P3_0 = 1;P0 = 0x20;P3_0 = 0;P0 = 0xbf;break; case 6:P3_0 = 0;P3_0 = 1;P0 = 0x40;P3_0 = 0;P0 = LED[2];break; case 7:P3_0 = 0;P3_0 = 1;P0 = 0x80;P3_0 = 0;P0 = 0x89;break; } cp++; if(cp >= 8) cp = 0; } void init_time() { TMOD = 0x15; //0001 0101 TH0 = 0; TL0 = 0; TH1 = (65536 - 4000)/256; TL1 = (65536 - 4000)%256; EA = 1; TR0 = 1; ET0 = 1; TR1 = 1; ET1 = 1; } void main() { init_time(); STC_pwm_init(); while(1) { delay(250); display(); CCAPM0 = 0x42; CCAPM1 = 0x42; CCAPM2 = 0x42; } } /*********PWM驱动 **************************/ sfr CCON = 0xd8; //可编程计数器PCA的控制寄存器 sfr CMOD = 0xd9; //可编程计数器工作模式寄存器 sfr CL = 0xe9; //可编程计数器的低八位 sfr CH = 0xf9; //可编程计数器的高八位 sfr AUXR1 = 0XA2; /*PWM模块0,P1.3输出*/ sfr CCAPM0 = 0xda; //PMW功能寄存器 sfr CCAP0L = 0xea; //高八位 sfr CCAP0H = 0xfa; //低八位 sfr PCA_PWM0 = 0xf2; //PWM辅助寄存器 /*PWM模块1,P1.4输出*/ sfr CCAPM1 = 0xdb; sfr CCAP1L = 0xeb; sfr CCAP1H = 0xfb; sfr PCA_PWM1 = 0xf3; /*PWM模块2,P1.5输出*/ sfr CCAPM2 = 0xdc; sfr CCAP2L = 0xec; sfr CCAP2H = 0xfc; sfr PCA_PWM2 = 0xf4; /***PWM模块初始化****/ void STC_pwm_init(void) { CMOD = 0x0e; //PWM频率 = 时钟频率/4/256,5.85kHZ AUXR1 = 0X20; //0x00 P1.0,P1.1,P3.7; 0x10 P3.5,3.6,3.7 0x20 P2.5,P2.6,P2.7; CL = 0x00; CH = 0x00; //计数器高/低四位清零 /******模块0,P2.5输出***********/ PCA_PWM0 = 0x00; //模块0,8位PWM,第九位EPC0L为0 CCAPM0 = 0X42; //允许比较,P1.1输出; /******模块1,P2.6输出***********/ PCA_PWM1= 0x00; //模块0,8位PWM,第九位EPC0L为0 CCAPM1 = 0X42; //允许比较,P1.0输出; /******模块2,P2.7输出***********/ PCA_PWM2 = 0x00; //模块0,8位PWM,第九位EPC0L为0 CCAPM2 = 0X42; //允许比较,P3.7输出; CCON = 0X40; //允许PAC计数,计数脉冲为时钟频率/4; } |
|
相关推荐 |
|
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
195 浏览 0 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
172 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
453 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
697 浏览 2 评论
602 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11985 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 11:05 , Processed in 0.644148 second(s), Total 56, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号