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

標(biāo)題: 利用pic16f676單片機(jī)定時(shí)器控制RA0端口發(fā)光二極管閃爍,請(qǐng)大佬幫我看看哪里問(wèn)題 [打印本頁(yè)]

作者: 1148794250    時(shí)間: 2024-1-2 11:09
標(biāo)題: 利用pic16f676單片機(jī)定時(shí)器控制RA0端口發(fā)光二極管閃爍,請(qǐng)大佬幫我看看哪里問(wèn)題
利用pic16f676單片機(jī)定時(shí)器控制RA0端口發(fā)光二極管閃爍,開始一段時(shí)間不亮,然后一直亮,無(wú)法閃爍,改了很多次,不知道是不是中斷設(shè)置問(wèn)題。拜托大佬幫我看看!
# 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;
        }
    }
}

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

有硬件調(diào)試工具的話,你可以打斷點(diǎn),查看相關(guān)寄存器和變量,來(lái)解決問(wèn)題。
沒(méi)有話,建議你使用proteus軟件模擬仿真運(yùn)行程序。
作者: 1148794250    時(shí)間: 2024-1-3 09:30
lightday 發(fā)表于 2024-1-2 14:57
剛開始要一步步來(lái)。
首先要配置RA0,確定輸出高低電平可控。
大概看下程序,RA0模擬通道AN0,CIN+沒(méi)有關(guān) ...

大佬,我就是檢測(cè)出好像沒(méi)有循環(huán)中斷,請(qǐng)問(wèn)一下CIN+沒(méi)有關(guān)閉是什么啊,我是剛剛?cè)胄械男“祝悬c(diǎn)不懂
作者: 1148794250    時(shí)間: 2024-1-3 09:32
lightday 發(fā)表于 2024-1-2 14:57
剛開始要一步步來(lái)。
首先要配置RA0,確定輸出高低電平可控。
大概看下程序,RA0模擬通道AN0,CIN+沒(méi)有關(guān) ...

請(qǐng)問(wèn)CIN+是要對(duì)RA0進(jìn)行A/D模擬轉(zhuǎn)換嗎
作者: 哦豁~    時(shí)間: 2024-1-4 10:39
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。
作者: 1148794250    時(shí)間: 2024-1-4 13:42
哦豁~ 發(fā)表于 2024-1-4 10:39
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。

大佬,我加上去后,還是無(wú)法實(shí)現(xiàn)
作者: 1148794250    時(shí)間: 2024-1-4 14:02
哦豁~ 發(fā)表于 2024-1-4 10:39
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。

可以實(shí)現(xiàn)了,非常感謝大佬,那個(gè)取反的語(yǔ)句一直沒(méi)有執(zhí)行,是因?yàn)镃IN+沒(méi)有關(guān)閉
作者: 1148794250    時(shí)間: 2024-1-4 14:38
哦豁~ 發(fā)表于 2024-1-4 10:39
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。

另外我請(qǐng)問(wèn)一下那個(gè)高低電平初始值的計(jì)算和51單片機(jī)是一樣的嗎,我在網(wǎng)上看見(jiàn)好幾種算法,以4MHZ晶振頻率,1:8預(yù)分配為例子。
第一種是:時(shí)鐘周期為0.25us,指令周期為0.25*4=1us,經(jīng)過(guò)預(yù)分頻1:8后,指令周期變?yōu)?us,TMR1IF溢出為1時(shí)需要通過(guò)低八位8us*256=2048us,通過(guò)高八位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分頻好像也沒(méi)有用到。希望大佬能解惑!!!
作者: Hephaestus    時(shí)間: 2024-1-4 15:18
1148794250 發(fā)表于 2024-1-4 14:38
另外我請(qǐng)問(wèn)一下那個(gè)高低電平初始值的計(jì)算和51單片機(jī)是一樣的嗎,我在網(wǎng)上看見(jiàn)好幾種算法,以4MHZ晶振頻率 ...

這個(gè)就不用解惑了吧,你自己用示波器測(cè)一下不就知道了嗎?如果沒(méi)有示波器,數(shù)LED閃爍個(gè)數(shù)對(duì)比鬧鐘秒針運(yùn)動(dòng)總會(huì)吧?
作者: 1148794250    時(shí)間: 2024-1-4 15:55
Hephaestus 發(fā)表于 2024-1-4 15:18
這個(gè)就不用解惑了吧,你自己用示波器測(cè)一下不就知道了嗎?如果沒(méi)有示波器,數(shù)LED閃爍個(gè)數(shù)對(duì)比鬧鐘秒針運(yùn) ...

好的,非常感謝!!!

作者: 哦豁~    時(shí)間: 2024-1-4 18:14
1148794250 發(fā)表于 2024-1-4 14:38
另外我請(qǐng)問(wèn)一下那個(gè)高低電平初始值的計(jì)算和51單片機(jī)是一樣的嗎,我在網(wǎng)上看見(jiàn)好幾種算法,以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。
作者: 1148794250    時(shí)間: 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 ...

感謝!!!
作者: hanshoudong    時(shí)間: 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 ...

天才解釋,比書上通俗易懂多了,感謝




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美国产日韩在线观看成人 | 在线播放中文字幕 | 国产精品久久久久久久久久久新郎 | 欧美日韩免费视频 | 91在线看片 | 亚洲视频免费在线看 | 在线一区 | 一级视频在线免费观看 | 羞羞视频网站免费观看 | 欧美国产日韩一区二区三区 | 亚洲国产成人精品久久久国产成人一区 | 中文字幕99 | 二区中文字幕 | 成年人免费在线视频 | 搞av.com| 欧美国产精品一区二区三区 | 精品视频 免费 | 亚洲国产精品视频一区 | 亚洲午夜精品视频 | 男人天堂免费在线 | 久久精品99 | 国产福利资源在线 | 亚洲1区| 天天操天天干天天曰 | 欧美成人一区二区 | 国产精品成人一区二区 | 欧美黄在线观看 | 国产亚洲成av人片在线观看桃 | 国产黄色一级电影 | 二区中文 | 亚洲精品18 | 久久成人精品 | 久久免费福利 | 国产一区在线免费观看视频 | 亚洲444kkkk在线观看最新 | 天天亚洲 | 三级成人在线 | 天天操妹子| 福利精品 | 免费黄篇 | 精品www |