完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
***it pwm=P3^0; //舵机 ***it zuo=P3^3; // 红外 ***it you=P3^2; // 红外 ***it BAI=P2^0; ***it SHI=P2^1; ***it GE =P2^2; ***it ENA=P1^1; //电机 ***it IN1=P1^2; ***it IN2=P1^3; char jd; unsigned char count; unsigned char n; unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; void delay(unsigned int i) { unsigned int j,k; for(j=i;j>0;j--) for(k=110;k>0;k--); } void time0_init() { TMOD=0x01; EA=1; ET0=1; TR0=1; TH0=(65536-158)/256; TL0=(65536-158)%256; } void Time1_init() { TMOD=0x01; EA=1; ET1=1; TR1=1; TH1=0x4c; TL1=0x00; } void Time0_int() interrupt 1 { TH1=(65536-158)/256; TL1=(65536-158)%256; if(count else pwm=0; count++; count=count%40; } void Time1_int() interrupt 3 { TR1=0; TH1=0x4c; TL1=0x00; n++; TR1=1; } void keyscan() { if(zuo==0&&you==1) { Time1_init(); if(n==10) { ENA=1; IN1=0; IN2=1; n=0; TR1=0; } ENA=1; IN1=1; IN2=0; if(jd==7) { jd=jd+2; } else { jd=jd+3; } count=0; if(jd>9) { jd=9; } while(zuo==0&&you==1); } if(you==0&&zuo==1) { Time1_init(); if(n==10) { ENA=1; IN1=0; IN2=1; n=0; TR1=0; } ENA=1; IN1=1; IN2=0; if(jd==9) { jd=jd-2; } else { jd=jd-3; } count=0; if(jd<4) { jd=4; } while(you==0&&zuo==1); } if(you==0&&zuo==0) { while(you==0&&zuo==0) ; ENA=1; IN1=1; IN2=0; } } void display() { switch(jd) { case 4: P0=table[9]; BAI = 0; delay(1); BAI = 1; P0=table[0]; SHI = 0; delay(1); SHI = 1; P0=table[1]; GE = 0; delay(1); GE = 1; break; case 7: P0=table[0]; BAI = 0; delay(1); BAI = 1; P0=table[0]; SHI = 0; delay(1); SHI = 1; P0=table[0]; GE = 0; delay(1); GE = 1; break; case 9: P0=table[0]; BAI = 0; delay(1); BAI = 1; P0=table[0]; SHI = 0; delay(1); SHI = 1; P0=table[1]; GE = 0; delay(1); GE = 1; break; } } void main() { jd=7; count=0; ENA=1; IN1=1; IN2=0; Time0_init(); Time1_init(); while(1) { keyscan(); display(); } } 我想实现 pwm波一直输出 t0定时 在检测到红外时候打开t1定时器 500ms 让电机反转 然后关闭定时器 现在 下载进去 车的舵机没反应了 电机也不能反转 求问 两个定时器同时工作 要怎么写 谢谢各位 |
|
相关推荐
4个回答
|
|
/*********T0、T1分别设置***********/
void Time0_init() { TMOD &= 0xF0; TMOD |= 0x01; TH0=(65536-158)/256; TL0=(65536-158)%256; TR0=1; ET0=1; EA=1; } void Time1_init() { TMOD &= 0x0F; TMOD |= 0x10; TH1=0x4c; TL1=0x00; TR1=1; ET1=1; // EA=1;//重复设置无意义 } /*********T0、T1共同设置***********/ void Time_init() { TMOD = 0x11; TH0=(65536-158)/256; TL0=(65536-158)%256; TH1=0x4c; TL1=0x00; TR0=1; TR1=1; ET0=1; ET1=1; EA=1; } |
|
|
|
在写中断函数注意就可以了都一样的
|
|
|
|
建议你先看看郭天祥的51视频,找到定时器那里。
同时开两个定时器是没有问题的。好长时间没看了,判断不了你的程序写的对不对 我记得微机原理那本书后边,有个控制电机的程序,以前我做实验的时候就是用的那个程序。 |
|
|
|
SFR-TCON和TMOD控制T0和T1的运行状态和工作方式
控制寄存器TCON(地址88H) D7~D0:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 高4位与定时/计数器有关,低4位用于控制外部中断。 TFi-定时/计数器溢出标志位;计数溢出时,硬件自动置1,在中断允许条件下,是向CPU请求中断的信号。中断被响应后,硬件自动清0。该位也可由软件置位和清0,(中断屏蔽时)可以由软件查询测试。 TRi-定时/计数器运行控制位;该位置1时,定时/计数器才运行,否则,停止。 ITi-外部中断请求电信号触发方式选择(0电平、1下降沿) IEi-有外部中断请求标志。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11771 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 20:37 , Processed in 0.773227 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号