久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4209|回復(fù): 3
收起左側(cè)

STC15F204W開雙定時器問題

[復(fù)制鏈接]
ID:16695 發(fā)表于 2017-5-5 21:58 | 顯示全部樓層 |閱讀模式
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. typedef unsigned char BYTE;
  4. typedef unsigned int WORD;
  5. sfr AUXR  = 0x8e;               //輔助寄存器
  6. sfr S2CON = 0x9a;               //UART2 控制寄存器
  7. sfr S2BUF = 0x9b;               //UART2 數(shù)據(jù)寄存器
  8. sfr T2H   = 0xd6;               //定時器2高8位
  9. sfr T2L   = 0xd7;               //定時器2低8位
  10. sfr IE2   = 0xaf;               //中斷控制寄存器2
  11. WORD vel=0;
  12. sbit P10=P1^0;
  13. bit busy;

  14. void UartInit(void)                //9600bps@11.0592MHz
  15. {
  16.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  17.         AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
  18.         T2L = 0xE0;                //設(shè)定定時初值
  19.         T2H = 0xFE;                //設(shè)定定時初值
  20.         AUXR |= 0x01;                //串口1選擇定時器2為波特率發(fā)生器
  21.         AUXR |= 0x10;                //啟動定時器2
  22. }


  23. void Timer0Init(void)                //10微秒@11.0592MHz
  24. {
  25.         AUXR |= 0x80;                //定時器時鐘1T模式
  26.         TMOD &= 0xF0;                //設(shè)置定時器模式
  27.         TMOD |= 0x02;                //設(shè)置定時器模式
  28.         TL0 = 0x91;                //設(shè)置定時初值
  29.         TH0 = 0x91;                //設(shè)置定時重載值
  30.         TF0 = 0;                //清除TF0標(biāo)志
  31.         TR0 = 1;                //定時器0開始計時
  32. }

  33. /*----------------------------
  34. 發(fā)送串口數(shù)據(jù)
  35. ----------------------------*/
  36. void SendData(BYTE dat)
  37. {
  38.     while (busy);               //等待前面的數(shù)據(jù)發(fā)送完成
  39.     busy = 1;
  40.     SBUF = dat;                 //寫數(shù)據(jù)到UART數(shù)據(jù)寄存器
  41. }

  42. void main()
  43. {
  44. UartInit();
  45. Timer0Init();
  46. while(1);
  47. }
  48. void timer0 (void) interrupt 1
  49. {
  50.    if(vel==200)
  51.    {
  52.    P10=~P10;
  53.    SendData(P10);
  54.    }
  55.    vel++;
  56. }
  57. void Uart() interrupt 4 using 1
  58. {
  59.     if (RI)
  60.     {
  61.         RI = 0;                 //清除RI位
  62.     }
  63.     if (TI)
  64.     {
  65.         TI = 0;                 //清除TI位
  66.         busy = 0;               //清忙標(biāo)志
  67.     }
  68. }
復(fù)制代碼
      我想開啟兩個定時器,定時器0和定時器2,定時器0做定時使用,定時器2做串口調(diào)試使用,單個定時器我都能成功開通,但兩個一起開,串口能正常工作,定時器0不能正常工作。串口讀取不到P10送出的值,單獨(dú)開通串口能正常工作,不知我那里寫錯了,會的朋友能指導(dǎo)下。

相關(guān)帖子

回復(fù)

使用道具 舉報

ID:474677 發(fā)表于 2019-2-4 11:21 | 顯示全部樓層
傳統(tǒng)51的串口是使用T1定時器的,樓主用的STC15F204W是STC自行擴(kuò)展的標(biāo)準(zhǔn),要使用STC的頭文件才能用上T2產(chǎn)生波特率,建議樓主仔細(xì)看下STC數(shù)據(jù)手冊和例程
回復(fù)

使用道具 舉報

ID:155507 發(fā)表于 2019-2-4 16:21 | 顯示全部樓層
之所以不能使用串口中斷,是因為你的定時器設(shè)置太小,已經(jīng)等于小于串口機(jī)器周期。而定時器中斷優(yōu)先級高于串口中斷,所以不能執(zhí)行串口中斷。解決方法1定時器時間改長一點(diǎn)2把串口優(yōu)先級設(shè)高于定時器。
回復(fù)

使用道具 舉報

ID:47286 發(fā)表于 2019-2-5 03:23 | 顯示全部樓層
我也是你這么用的 都挺好 你對比一下 另外 11.0592下 10微秒太小了 0誤差至少要17微秒

下面是定時器0的初始化 上面是官網(wǎng) 下面是你的 對比一下
/*STC官網(wǎng)范例
void Timer0Init(void)                //5毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設(shè)置定時器模式
        TMOD |= 0x01;                //設(shè)置定時器模式
        TL0 = 0x00;                        //設(shè)置定時初值
        TH0 = 0x28;                        //設(shè)置定時初值
        TF0 = 0;                        //清除TF0標(biāo)志
        TR0 = 1;                        //定時器0開始計時
}*/
//你的程序
void Timer0Init(void)                //10微秒@11.0592MHz
{
        AUXR |= 0x80;                //定時器時鐘1T模式
        TMOD &= 0xF0;                //設(shè)置定時器模式
        TMOD |= 0x02;                //設(shè)置定時器模式
        TL0 = 0x91;                //設(shè)置定時初值
        TH0 = 0x91;                //設(shè)置定時重載值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時器0開始計時
}
//串口初始化
//你的程序
void UartInit(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
        T2L = 0xE0;                //設(shè)定定時初值
        T2H = 0xFE;                //設(shè)定定時初值
        AUXR |= 0x01;                //串口1選擇定時器2為波特率發(fā)生器
        AUXR |= 0x10;                //啟動定時器2
}
//我的程序
void Init_UART1()                //串口初始化 1T/定時器2作波特率發(fā)生器
{
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x01;                //串口1選擇定時器2為波特率發(fā)生器
        AUXR |= 0x04;                //定時器2時鐘為Fosc,即1T
        T2L = BAUD1L;                //設(shè)定定時初值
        T2H = BAUD1H;                //設(shè)定定時初值
        AUXR |= 0x10;                //啟動定時器2
        ES=1;                                //開串口中斷
}
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费在线 | 狠狠躁天天躁夜夜躁婷婷老牛影视 | 国产ts一区 | 日韩中文字幕在线视频观看 | 日韩av黄色 | 7777奇米影视 | 成人深夜福利在线观看 | 欧美日韩大陆 | 国产日韩欧美在线 | 天堂视频一区 | 黄网站涩免费蜜桃网站 | 免费中文字幕 | 亚洲精品成人av久久 | 精品视频在线免费观看 | 欧美三级成人理伦 | 亚洲精品66| 欧美一区二区三区视频在线观看 | 国产精品一区二区三级 | 久久69精品久久久久久久电影好 | 电影91久久久 | 久草在线高清 | av在线一区二区三区 | 亚洲国产aⅴ精品一区二区 免费观看av | 日本人做爰大片免费观看一老师 | 中文字幕综合 | 天天爽夜夜操 | 国产区精品| 懂色av色香蕉一区二区蜜桃 | 蜜桃日韩 | 在线观看国产视频 | 国产一区二区三区欧美 | 久久婷婷色 | 国产精品大全 | 97久久精品午夜一区二区 | 日韩精品一区二 | 欧美在线观看一区 | 男女啪啪高潮无遮挡免费动态 | www一级片 | 91一区二区在线观看 | 91精品国产综合久久福利软件 | 91精品中文字幕一区二区三区 |