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

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

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
ID:1107532 發(fā)表于 2024-1-2 11:09 | 顯示全部樓層 |閱讀模式
利用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ā)光二極管形成電勢差發(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;
        }
    }
}
回復(fù)

使用道具 舉報(bào)

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) ...

大佬,我就是檢測出好像沒有循環(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)

ID:1093268 發(fā)表于 2024-1-4 10:39 | 顯示全部樓層
ANSEL &= 0xFE;
CMCON = 0x07;
IO初始化時(shí),加這2句就好了。
回復(fù)

使用道具 舉報(bào)

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)

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è)取反的語句一直沒有執(zhí)行,是因?yàn)镃IN+沒有關(guān)閉
回復(fù)

使用道具 舉報(bào)

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)

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

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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)

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)

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ù) 返回頂部 返回列表
主站蜘蛛池模板: 久草在线 | 欧美淫 | 国产精品国产成人国产三级 | 欧美 日韩 国产 成人 在线 91 | 亚洲欧美精品一区 | 国产色网站 | 日韩精品一区二区三区中文在线 | 日韩一区和二区 | 亚洲一区久久 | 一区二区三区四区五区在线视频 | 黄色一级毛片 | 新91 | 久草新在线 | 2019天天操 | 日韩欧美在线一区 | 激情久久av一区av二区av三区 | 综合久久综合久久 | 黑人中文字幕一区二区三区 | 色橹橹欧美在线观看视频高清 | 久久一区二| 亚洲激精日韩激精欧美精品 | 中文字幕亚洲视频 | 久草精品视频 | 日本超碰 | 成人伊人| www.99精品| 国产一区二区三区视频 | 在线视频 中文字幕 | 久久久久一区二区三区 | 草比av| 欧洲一级毛片 | 97影院2| av无遮挡 | 日本不卡一区二区三区 | 国产99视频精品免费播放照片 | 美女爽到呻吟久久久久 | 黄a在线播放 | 亚洲成人国产 | 狠狠久| 午夜影院普通用户体验区 | 91高清免费 |