标题: 单片机定时器不工作 [打印本页]

作者: ynzsc001    时间: 2020-2-1 11:26
标题: 单片机定时器不工作
单片机:STC12C5A60S2      晶振:22.1184 MHz
1、使用单片机的 串口 2 接收GPS模块信息;
2、使用定时器 1  来控制 P3 口 输出高电平;

现在的问题是:
1、我在主函数的while循环里面先将  P3 口输出低电平, (有动作)
2、在定时器 1 的中断函数里面将 P3 口输出高电平,(不会动作)

以下是代码:
1、主函数循环
        while(1)
        {
                P3=0;  // 测试用
                GPS_JieXi();
                  ......        

2、波特率、定时器 初值设置
void Uart2_Init()                // 第二串口,9600bps、22.1184MHz
{
        AUXR &= 0xF7;                //波特率不倍速
        S2CON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
        BRT          = 0xB8;                //设定独立波特率发生器重装值
        AUXR |= 0x10;                //启动独立波特率发生器
        IE2         = 0x01;   //打开串行口中断
//---------------------------------------------------------------
        AUXR |= 0x40;                //定时器时钟1T模式
        TMOD &= 0x0F;                //设置定时器模式
        TL1 = 0x9A;                //设置定时初值
        TH1 = 0xA9;                //设置定时初值
        TF1 = 0;                //清除TF1标志
        TR1 = 1;                //定时器1开始计时
        ET1 = 1;
//----------------------------------------------------------------        
        EA   = 1;                     //打开全局中断控制
               
}


3、定时器 1  中断函数,定时100 毫秒
void Timer() interrupt 3
        {        

                Time++;
                        if(Time==100)
                                {
                                        Time=0;                        
                                        P3=1;
                                }
        }

        




作者: csmyldl    时间: 2020-2-1 12:36
你所控制的P3=0 P3=1刚好是P30这一根口线,这根口线又是串行口的通信线,建议控制P1口试试
作者: wulin    时间: 2020-2-1 13:06
P3=0;没有什么问题:00000000,P3=1;问题就来了:00000001。P3只有最低位是高电平。
要用16进制写:P3=0x00; P3=0xff;
作者: xuyaqi    时间: 2020-2-1 13:48
P3口是8位,P3=1;相当于P3=0x01;你P3=0xff试试。
作者: lele5211314    时间: 2020-2-1 14:54
你这个程序都没有设置定时器1的工作模式
作者: ynzsc001    时间: 2020-2-1 23:22
wulin 发表于 2020-2-1 13:06
P3=0;没有什么问题:00000000,P3=1;问题就来了:00000001。P3只有最低位是高电平。
要用16进制写:P3=0x0 ...

真的是这样啊。谢谢
作者: ynzsc001    时间: 2020-2-1 23:23
xuyaqi 发表于 2020-2-1 13:48
P3口是8位,P3=1;相当于P3=0x01;你P3=0xff试试。

真的是这样啊。这个知识真的是现在才知道的。谢谢
作者: ynzsc001    时间: 2020-2-1 23:24
lele5211314 发表于 2020-2-1 14:54
你这个程序都没有设置定时器1的工作模式

已经设置了。现在已经可以工作了。设置为P3=0X00,0XFF  之后就可以工作了。
作者: ynzsc001    时间: 2020-2-1 23:25
csmyldl 发表于 2020-2-1 12:36
你所控制的P3=0 P3=1刚好是P30这一根口线,这根口线又是串行口的通信线,建议控制P1口试试

也倒是不影响,因为我的GPS是接在第二个串口上(P1.2)
作者: ynzsc001    时间: 2020-2-1 23:27
wulin 发表于 2020-2-1 13:06
P3=0;没有什么问题:00000000,P3=1;问题就来了:00000001。P3只有最低位是高电平。
要用16进制写:P3=0x0 ...

经过你的指点,改了之后OK,会动作了。
作者: lucheng77    时间: 2020-2-1 23:37
ynzsc001 发表于 2020-2-1 23:22
真的是这样啊。谢谢

你也可以写P3=255也是对的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1