完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
定时功能出问题,不准,有人能点拨下我的程序问题出在哪吗?
#include __CONFIG(HS&WDTDIS&LVPDIS); #define P1 RC7 //模拟定时加 #define P2 RC6 //模拟定时减 #define LED1 RC4 //模拟电磁阀 #define LED2 RC5 //模拟电磁阀 #define Beng RC3 //模拟定时时间到时,切断所有设备的信号 unsigned int q=1; //用于电磁阀切换程序 unsigned char h=0; //用于电磁阀切换程序 unsigned int check=0; //用于定时程序 signed char t=0; //存储定时值 unsigned char ONE=1; unsigned char d=0; const unsigned char LED[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7f,0x6f}; void Delay1602(unsigned int g) { unsigned int k; //定义一个16位寄存器用来做延时用 for(k=0;k void interrupt ISR(void) //中断程序 { if(T0IF==1) { PORTB=0; d=!d; if(d==0) { PORTD=0B00000000; PORTB=LED[t/10]; } else { PORTD=0B00000001; PORTB=LED[t%10]; } TMR0=0x13; T0IF=0; if(ONE==1) { if(++q>2000) //4s { q=1; LED1=0; LED2=1; ONE++; } } else if(ONE==2) { if(++q>500) //1s { q=1; LED1=0; LED2=0; ONE++; } } else if(ONE==3) { if(++q>130) //0.26 { q=1; LED1=0; LED2=1; ONE++; } } else if(ONE==4) { if(++q>1370) //2.74s { q=1; LED1=1; LED2=1; ONE++; } } else if(ONE==5) { if(++q>350) //0.7s { q=1; LED1=(!h); LED2=h; h=(!h); ONE--; } } } else if(TMR2IF==1) //定时中断 { TMR2=0x12; TMR2IF=0; if(++check>(250*60)) //4000us中断一次,再计次250次后就是1000毫秒,乘60就是1分钟 { check=0; if(t==1) Beng=1; t--; } } } void main(void) { TRISD=0B11111000; TRISB=0B00000000; PORTB=0B00000000; PORTD=0B00000000; TRISC=0B11000000; PORTC=0B00110000; T2CKPS1=1; T2CKPS0=1; TMR2=0X12; TOUTPS3=0; TOUTPS2=0; TOUTPS1=0; TOUTPS0=0; TMR2IF=0; TMR2IE=1; PEIE=1; T0CS=0; PSA=0; PS0=0; PS1=1; PS2=0; TMR0=0X13; T0IF=0; T0IE=1; GIE=1; while(1) { if(P1==0) { t++; Delay1602(25000); while(P1==0) { t++; Delay1602(15000); if(t>99) t=0; } if(t>99) t=0; } if(P2==0) { t--; Delay1602(25000); while(P2==0) { t--; Delay1602(15000); if(t<0) t=99; } if(t<0) t=99; } //定时程序 if(t!=0) { TMR2ON=1; Beng=0; } //判断是否定时到时 else TMR2ON=0; } } |
|
相关推荐
4个回答
|
|
因为在主函数里个人没办法让数码管有足够的刷新频率从而显示无闪烁的定时,所以想在中断中实现,但是如题,在中断中加入数码管显示的几句语句就造成程序出现了问题,现象就是数码管显示的定时周期远大于1分钟,愣是没看出问题出在哪
|
|
|
|
帮顶一下。。。虽然搞不定
|
|
|
|
谢谢分享 先学习下
|
|
|
|
这是用哪个PIC单片机?Timer2寄存器是多少位的?这个250*60是不是超了?
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2066 浏览 1 评论
3343 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2315 浏览 2 评论
2742 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
3989 浏览 5 评论
937浏览 0评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6327浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-7 14:27 , Processed in 0.662884 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号