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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1740|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

利用pic16f676單片機(jī)定時(shí)器控制RA0端口發(fā)光二極管閃爍,請(qǐng)大佬幫我看看哪里問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1107532 發(fā)表于 2024-1-2 11:09 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
利用pic16f676單片機(jī)定時(shí)器控制RA0端口發(fā)光二極管閃爍,開始一段時(shí)間不亮,然后一直亮,無法閃爍,改了很多次,不知道是不是中斷設(shè)置問題。拜托大佬幫我看看!
# include <xc.h>
#pragma config FOSC = INTRCIO  
#pragma config WDTE = OFF   
#pragma config PWRTE = ON      
#pragma config MCLRE = OFF   
#pragma config BOREN = OFF      
#pragma config CP = OFF        
#pragma config CPD = OFF      

#define uchar unsigned char
#define uint unsigned int

uint intnum;

void init()  //定時(shí)器初始化設(shè)置
{   
    //T0CS=0;   //Timer0使用內(nèi)部時(shí)鐘             OPTION_REG - 選擇寄存器
    //PSA=1;   //將預(yù)分頻器給看門狗WDT           OPTION_REG -選擇寄存器
    //PS0=1;
    //PS1=1;
    //PS2=0;
    //TMR0=0x00; //定時(shí)器
    //T0IF=1;  //Timer0 啟動(dòng)控制位使能(0關(guān)閉)(標(biāo)志位)    INTCON - 中斷控制寄存器
    //T0IE=1;  //Timer0中斷開啟(使能位)                   INTCON - 中斷控制寄存器
    //WDTE=1;

    TMR1CS=0;   //Timer1使用內(nèi)部時(shí)鐘           Timer1 控制寄存器
    T1CKPS0=1;  //1:8倍預(yù)分頻比                Timer1 控制寄存器      T1CKPS1:T1CKPS0:11=1:8倍預(yù)分頻比
    T1CKPS1=1;  //1:8倍預(yù)分頻比                Timer1 控制寄存器
    //TMR1H=(65536-(50000/3))/256; //初始化TMR1的高八位初始值
    //TMR1L=(65536-(50000/3))%256; //初始化TMR1的低八位初始值
    TMR1H=0x0B;  //高八位置初始值    00001011
    TMR1L=0xE9;  //低八位置初始值    11101001
    TMR1ON=1;  //Timer1 啟動(dòng)控制位使能(0關(guān)閉)       Timer1 控制寄存器
    TMR1IF=0;  //中斷標(biāo)志位清零                      外設(shè)中斷標(biāo)志寄存器 1
    TMR1IE=1;  //Timer1中斷開啟                      外設(shè)中斷使能寄存器 1
    PEIE=1;  //外部中斷開啟                          INTCON - 中斷控制寄存器
    GIE=1;  //全局中斷開啟                           INTCON - 中斷控制寄存器
}


void main ()
{
    TRISA=0b00110100;  //RA2,RA4,RA5為輸入,其他輸出
    TRISC=0b00010011;  //RC0、RC1、RC4為輸入,其他輸出
    PORTA=0b00000000;  //RA口輸出低電平
    PORTC=0b00000000;  //RC口輸出低電平   
    init();
    while(1)
    {
       /* if (intnum ==20) //中斷溢出計(jì)數(shù)達(dá)到20次  20*50ms=1秒亮一次
        {
            intnum = 0;  //溢出次數(shù)清零
            RA0 = !RA0;  //RA0端口取反為1,鏈接RA0端口的發(fā)光二極管形成電勢(shì)差發(fā)亮
        }*/
    }
}

void interrupt ISR()
{
    if (TMR1IF == 1)
    {
        TMR1IF=0;  //中斷標(biāo)志溢出清0
        //TMR1H=(65536-(50000/3))/256; //初始化TMR1的高八位初始值
        //TMR1L=(65536-(50000/3))%256; //初始化TMR1的低八位初始值
        TMR1H=0x0B;  //高八位置初始值    00001011
        TMR1L=0xE9;  //低八位置初始值    11101001
        intnum++;

        if (intnum==173)
        {
            intnum = 0;
            RA0 = !RA0;
        }
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:607298 發(fā)表于 2024-1-2 14:57 | 只看該作者
剛開始要一步步來。
首先要配置RA0,確定輸出高低電平可控。
大概看下程序,RA0模擬通道AN0,CIN+沒有關(guān)閉,RA0應(yīng)該無法高低電平輸出。
然后再確認(rèn)計(jì)時(shí)中斷正常觸發(fā)。

有硬件調(diào)試工具的話,你可以打斷點(diǎn),查看相關(guān)寄存器和變量,來解決問題。
沒有話,建議你使用proteus軟件模擬仿真運(yùn)行程序。
回復(fù)

使用道具 舉報(bào)

板凳
ID:1107532 發(fā)表于 2024-1-3 09:30 | 只看該作者
lightday 發(fā)表于 2024-1-2 14:57
剛開始要一步步來。
首先要配置RA0,確定輸出高低電平可控。
大概看下程序,RA0模擬通道AN0,CIN+沒有關(guān) ...

大佬,我就是檢測(cè)出好像沒有循環(huán)中斷,請(qǐng)問一下CIN+沒有關(guān)閉是什么啊,我是剛剛?cè)胄械男“祝悬c(diǎn)不懂
回復(fù)

使用道具 舉報(bào)

地板
ID:1107532 發(fā)表于 2024-1-3 09:32 | 只看該作者
lightday 發(fā)表于 2024-1-2 14:57
剛開始要一步步來。
首先要配置RA0,確定輸出高低電平可控。
大概看下程序,RA0模擬通道AN0,CIN+沒有關(guān) ...

請(qǐng)問CIN+是要對(duì)RA0進(jìn)行A/D模擬轉(zhuǎn)換嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:1093268 發(fā)表于 2024-1-4 10:39 | 只看該作者
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。
回復(fù)

使用道具 舉報(bào)

6#
ID:1107532 發(fā)表于 2024-1-4 13:42 | 只看該作者
哦豁~ 發(fā)表于 2024-1-4 10:39
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。

大佬,我加上去后,還是無法實(shí)現(xiàn)
回復(fù)

使用道具 舉報(bào)

7#
ID:1107532 發(fā)表于 2024-1-4 14:02 | 只看該作者
哦豁~ 發(fā)表于 2024-1-4 10:39
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。

可以實(shí)現(xiàn)了,非常感謝大佬,那個(gè)取反的語(yǔ)句一直沒有執(zhí)行,是因?yàn)镃IN+沒有關(guān)閉
回復(fù)

使用道具 舉報(bào)

8#
ID:1107532 發(fā)表于 2024-1-4 14:38 | 只看該作者
哦豁~ 發(fā)表于 2024-1-4 10:39
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。

另外我請(qǐng)問一下那個(gè)高低電平初始值的計(jì)算和51單片機(jī)是一樣的嗎,我在網(wǎng)上看見好幾種算法,以4MHZ晶振頻率,1:8預(yù)分配為例子。
第一種是:時(shí)鐘周期為0.25us,指令周期為0.25*4=1us,經(jīng)過預(yù)分頻1:8后,指令周期變?yōu)?us,TMR1IF溢出為1時(shí)需要通過低八位8us*256=2048us,通過高八位2048us*256=524288us,定時(shí)器需要524288us溢出,設(shè)定0.5s溢出:524288-500000=24288us,指令周期x預(yù)分頻比=預(yù)分頻器溢出的周期:1usX8=8us,初始值的時(shí)間/預(yù)分頻器溢出的周期=初始值 :24288us/8us=3036,將其轉(zhuǎn)換為十六進(jìn)制為0x0BDC;
第二種是:從0加滿需要65536個(gè)機(jī)器周期,每個(gè)機(jī)器周期等于12個(gè)時(shí)鐘周期,4M晶振每個(gè)機(jī)器周期為0.25us,每加一個(gè)數(shù)的機(jī)器周期為12*0.25=3us,中斷一次耗時(shí)50ms,中斷20次為1s,50ms的初值計(jì)算為:中斷值 =(65536-初值)*機(jī)器周期,初值=(65536-(50000/3);
不知道哪種算法是對(duì)的,第一個(gè)的初值網(wǎng)上很少是524288,幾乎都是65536;第二個(gè)的機(jī)器周期等于12個(gè)時(shí)鐘周期不知道這個(gè)是以什么為例子,pic單片機(jī)是不是機(jī)器周期都是等于4個(gè)時(shí)鐘周期?而且第二種1:8分頻好像也沒有用到。希望大佬能解惑!!!
回復(fù)

使用道具 舉報(bào)

9#
ID:883242 發(fā)表于 2024-1-4 15:18 | 只看該作者
1148794250 發(fā)表于 2024-1-4 14:38
另外我請(qǐng)問一下那個(gè)高低電平初始值的計(jì)算和51單片機(jī)是一樣的嗎,我在網(wǎng)上看見好幾種算法,以4MHZ晶振頻率 ...

這個(gè)就不用解惑了吧,你自己用示波器測(cè)一下不就知道了嗎?如果沒有示波器,數(shù)LED閃爍個(gè)數(shù)對(duì)比鬧鐘秒針運(yùn)動(dòng)總會(huì)吧?
回復(fù)

使用道具 舉報(bào)

10#
ID:1107532 發(fā)表于 2024-1-4 15:55 | 只看該作者
Hephaestus 發(fā)表于 2024-1-4 15:18
這個(gè)就不用解惑了吧,你自己用示波器測(cè)一下不就知道了嗎?如果沒有示波器,數(shù)LED閃爍個(gè)數(shù)對(duì)比鬧鐘秒針運(yùn) ...

好的,非常感謝!!!
回復(fù)

使用道具 舉報(bào)

11#
ID:1093268 發(fā)表于 2024-1-4 18:14 | 只看該作者
1148794250 發(fā)表于 2024-1-4 14:38
另外我請(qǐng)問一下那個(gè)高低電平初始值的計(jì)算和51單片機(jī)是一樣的嗎,我在網(wǎng)上看見好幾種算法,以4MHZ晶振頻率 ...

1. PIC16F676的內(nèi)部RC振蕩器FOSC頻率是4MHz;
2. 當(dāng)Timer1的時(shí)鐘源是內(nèi)部時(shí)鐘(FOSC/4)時(shí),即TMR1CS=1。Timer1的時(shí)鐘源頻率就是4MHz/4=1MHz;
3. 所以Timer1自增1的時(shí)間是:(1/1MHz) * Timer1預(yù)分頻比 = 1uS * Timer1預(yù)分頻比
4. Timer1的中斷機(jī)制是:溢出中斷,也及時(shí)TMR1H:TMR1L增加到65535后再加1,就觸發(fā)中斷.
5. 所以Timer1中斷時(shí)間= 1uS * Timer1預(yù)分頻比 * (65535 - Timer1初值)。比如要100mS中斷一次,可以設(shè)置分頻比是1:8,初值是53035(0xCF2B),也就是TMR1H=0xCF,TIMR1L=0x2B。
1uS * 8 * (65535 - 53035) = 100000uS = 100mS
PS:PIC16F676的機(jī)器周期是4T,并且Timer1的時(shí)鐘源實(shí)際是指令時(shí)鐘,因此就會(huì)有上面的FOSC/4。

評(píng)分

參與人數(shù) 1黑幣 +70 收起 理由
admin + 70 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

12#
ID:1107532 發(fā)表于 2024-1-5 08:27 | 只看該作者
哦豁~ 發(fā)表于 2024-1-4 18:14
1. PIC16F676的內(nèi)部RC振蕩器FOSC頻率是4MHz;
2. 當(dāng)Timer1的時(shí)鐘源是內(nèi)部時(shí)鐘(FOSC/4)時(shí),即TMR1CS=1。Ti ...

感謝!!!
回復(fù)

使用道具 舉報(bào)

13#
ID:1049963 發(fā)表于 2024-5-21 13:15 | 只看該作者
哦豁~ 發(fā)表于 2024-1-4 18:14
1. PIC16F676的內(nèi)部RC振蕩器FOSC頻率是4MHz;
2. 當(dāng)Timer1的時(shí)鐘源是內(nèi)部時(shí)鐘(FOSC/4)時(shí),即TMR1CS=1。Ti ...

天才解釋,比書上通俗易懂多了,感謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www.欧美在线| 免费看黄色大片 | 亚洲午夜视频 | 亚洲综合在线播放 | 免费黄色一级视频 | 亚洲欧美日韩成人 | 日韩精品在线一区 | 日本黄色三级视频 | 99视频免费 | 成人在线视频网站 | 国产91页 | 欧美成人午夜 | 五月天激情影院 | 亚洲一区二区av | 亚洲第一区在线观看 | 日韩午夜片 | 中文字幕不卡在线 | 亚洲国产免费 | 国产精品九九 | 一区在线观看视频 | 黄色一级大片在线免费看国产一 | av黄色在线| 天天干天天操 | 欧美综合网 | 亚洲女人毛茸茸 | 久久久中文| 日韩小视频 | 不卡av在线播放 | 伊人网在线 | 亚洲欧美日韩一区二区三区四区 | 日韩精品久久久久久 | 亚洲字幕 | 国产精品网站在线观看 | 久草国产视频 | 伊人网在线 | 欧美一级特黄视频 | 性欧美69| 亚洲精品小视频 | 亚洲高清视频在线 | 97av在线| 久久精品久久久久 |