OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/FPGA开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 1105|回复: 6

为什么我的计时器设置不能进入中断

[复制链接]

3

主题

4

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2019-5-15
在线时间
2 小时
发表于 2019-5-15 09:41:37 | 显示全部楼层 |阅读模式
#include <reg51.h>//抢答器(还未设置未抢答响铃)
#define key P1
typedef unsigned int u16;
typedef unsigned char u8;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
sbit LSA=P2^4;
sbit LSB=P2^3;
sbit LSC=P2^2;
u8 tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
u8 m[8]={10,10,10,10,10,10,10,10};
u8 z,q=10,i;
u8 flag1,flag2,flag3,flag4;
void delay(u16 i){
while(i--);
}
void Time1Config(){
TMOD|=0x01;
TH1=0xd8;
TL1=0xf0;//10ms
TR1=1;//开启定时器
ET1=1;
EA=1;          
}
u8 kskan(void)
{
        u8 a=0,KeyValue;
        key=0x0f;
        if(key!=0x0f)//读取按键是否按下
        {
                delay(1000);//延时10ms进行消抖
                if(key!=0x0f)//再次检测键盘是否按下
                {       
                        //测试列
                        key=0X0F;
                        switch(key)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        //测试行
                        key=0XF0;
                        switch(key)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                        while((a<50)&&(key!=0xf0))         //检测按键松手检测
                        {
                                delay(1000);
                                a++;
                        }
                }
        }
        return KeyValue;
}
void daojishi(){
if(flag1==1){
m[0]=q;
m[1]=10;
m[2]=10;
m[3]=10;
m[4]=10;
m[5]=10;
m[6]=10;
m[7]=z;
}
if(flag2==1||flag3==1){
m[0]=q;
m[1]=10;
m[2]=10;
m[3]=10;
m[4]=10;
m[5]=10;
m[6]=z%10;
m[7]=z/10;
}
}
void shumaguan(){
u8 i;
for(i=0;i<8;i++){
switch(i){
case 0SA=0;LSB=0;LSC=0;break;
case 1SA=0;LSB=0;LSC=1;break;
case 2SA=0;LSB=1;LSC=0;break;
case 3SA=0;LSB=1;LSC=1;break;
case 4SA=1;LSB=0;LSC=0;break;
case 5SA=1;LSB=0;LSC=1;break;
case 6SA=1;LSB=1;LSC=0;break;
case 7SA=1;LSB=1;LSC=1;break;
}
P0=tab[m[i]];
delay(100);
P0=0x00;
}
}
void duli(){
if(k1==0){
delay(1000);
if(k1==0){
flag1=1;
flag2=0;
flag3=0;
}
}
if(k2==0){
delay(1000);
if(k2==0){
flag1=0;
flag2=1;
flag3=0;
}
}
if(k3==0){
delay(1000);
if(k3==0){
flag1=0;
flag2=0;
flag3=1;
}
}
if(k4==0){
delay(1000);
if(k4==0){
flag4=1;
}
}
if(flag1==1)
z=5;
if(flag2==1)
z=10;
if(flag3==1)
z=20;
}
void main(){
u8 d;
while(1){
duli();
daojishi();
shumaguan();
if(flag4==1){
Time1Config();
d=kskan();
if((d>=0&&d<=3)&&z>0){
q=d;
z=z;                                  
}       
}
}
}
void Time1() interrupt 3{
TH1=0xd0;
TL1=0x8f;
i++;
if(i==100){
i=0;
z--;
}
}


回复

使用道具 举报

100

主题

3640

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
6424
金钱
6424
注册时间
2017-2-18
在线时间
1143 小时
发表于 2019-5-15 17:42:40 | 显示全部楼层
帮顶~~
回复 支持 反对

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2018-12-2
在线时间
11 小时
发表于 2019-5-15 22:46:34 | 显示全部楼层
帮顶+1
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-5-4
在线时间
4 小时
发表于 2019-5-17 09:37:12 | 显示全部楼层
因为你的TMOD设置有问题,这里就不细述了,你用TIME 1,那是高4位设置,TMOD = 0X10;
要么是先 TMOD &= 0X0F ;//先清高四位,然后TMOD | = 0X10 ;所以说同学们写程序一定要规范
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-5-4
在线时间
4 小时
发表于 2019-5-17 09:39:23 | 显示全部楼层
其它就是你的程序要让人家看的懂,你的做好相关的注释,变量,参数是做什么用的,函数也一样,写的标准化,函数功能是什么,输入参数,输出参数等,让人家一看知道,我们来帮你解决问题的,你的先做好基本工作,否则让人家怎么给你解决。现在不规范的人真的太多了
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2019-5-4
在线时间
4 小时
发表于 2019-5-17 09:43:59 | 显示全部楼层
还有就是变量的命名,什么flag1,falg2,我们真心不知道你是做什么用的,你的按知名思意去命名,必要的时候标上注释分别是做什么的,另外变量的名义后,一定要初始化,这都是规范化的要求,为什么乱写,那就该出错,你不尊重技术,技术怎么可能尊重你,小中见大,细节决定成败。
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2019-6-14
在线时间
3 小时
发表于 2019-6-14 10:27:22 | 显示全部楼层
不写注释自己过段时间都会忘记。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

正点原子T100智能焊台强势面市上一条 /1 下一条

正点原子公众号

QQ|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2019-7-22 07:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表