找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2506|回复: 10
收起左侧

单片机定时器不工作

[复制链接]
ID:408809 发表于 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;
                                }
        }

        



回复

使用道具 举报

ID:235200 发表于 2020-2-1 12:36 | 显示全部楼层
你所控制的P3=0 P3=1刚好是P30这一根口线,这根口线又是串行口的通信线,建议控制P1口试试
回复

使用道具 举报

ID:213173 发表于 2020-2-1 13:06 | 显示全部楼层
P3=0;没有什么问题:00000000,P3=1;问题就来了:00000001。P3只有最低位是高电平。
要用16进制写:P3=0x00; P3=0xff;
回复

使用道具 举报

ID:94031 发表于 2020-2-1 13:48 | 显示全部楼层
P3口是8位,P3=1;相当于P3=0x01;你P3=0xff试试。
回复

使用道具 举报

ID:93224 发表于 2020-2-1 14:54 | 显示全部楼层
你这个程序都没有设置定时器1的工作模式
回复

使用道具 举报

ID:408809 发表于 2020-2-1 23:22 | 显示全部楼层
wulin 发表于 2020-2-1 13:06
P3=0;没有什么问题:00000000,P3=1;问题就来了:00000001。P3只有最低位是高电平。
要用16进制写:P3=0x0 ...

真的是这样啊。谢谢
回复

使用道具 举报

ID:408809 发表于 2020-2-1 23:23 | 显示全部楼层
xuyaqi 发表于 2020-2-1 13:48
P3口是8位,P3=1;相当于P3=0x01;你P3=0xff试试。

真的是这样啊。这个知识真的是现在才知道的。谢谢
回复

使用道具 举报

ID:408809 发表于 2020-2-1 23:24 | 显示全部楼层
lele5211314 发表于 2020-2-1 14:54
你这个程序都没有设置定时器1的工作模式

已经设置了。现在已经可以工作了。设置为P3=0X00,0XFF  之后就可以工作了。
回复

使用道具 举报

ID:408809 发表于 2020-2-1 23:25 | 显示全部楼层
csmyldl 发表于 2020-2-1 12:36
你所控制的P3=0 P3=1刚好是P30这一根口线,这根口线又是串行口的通信线,建议控制P1口试试

也倒是不影响,因为我的GPS是接在第二个串口上(P1.2)
回复

使用道具 举报

ID:408809 发表于 2020-2-1 23:27 | 显示全部楼层
wulin 发表于 2020-2-1 13:06
P3=0;没有什么问题:00000000,P3=1;问题就来了:00000001。P3只有最低位是高电平。
要用16进制写:P3=0x0 ...

经过你的指点,改了之后OK,会动作了。
回复

使用道具 举报

ID:316468 发表于 2020-2-1 23:37 | 显示全部楼层
ynzsc001 发表于 2020-2-1 23:22
真的是这样啊。谢谢

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

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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