標(biāo)題: 關(guān)于pic單片機(jī)的2個(gè)程序出現(xiàn)問(wèn)題,連老師都無(wú)法解決 [打印本頁(yè)]

作者: 何梓銘    時(shí)間: 2018-5-25 13:10
標(biāo)題: 關(guān)于pic單片機(jī)的2個(gè)程序出現(xiàn)問(wèn)題,連老師都無(wú)法解決
大家好 我是一位在校學(xué)生 有兩個(gè)程序出現(xiàn)了問(wèn)題 詢問(wèn)老師也沒(méi)有解決方法
所以請(qǐng)各位大大幫下忙

第一個(gè)函數(shù) 為計(jì)時(shí)器   每一秒 pic都會(huì)向電腦發(fā)送時(shí)間


00:00
00:01
00:02
00:03

用timer1來(lái)計(jì)時(shí)

當(dāng)發(fā)生中斷時(shí)候 數(shù)值加1


第二個(gè)函數(shù)為兩部分組成

1 在AN0 接收電壓

電壓 若為 0到 四分之一電壓  則 RB0=1
電壓 若為 四分之一電壓到 四分之二電壓  則 RB0=1 RB1=1
電壓 若為 四分之二電壓到 四分之三電壓  則 RB0=1 RB1=1  RB2=1
電壓 若為 四分之三電壓到 四分之四電壓 則 RB0=1 RB1=1  RB2=1 RB3=1

2加入timer0

timer0只有發(fā)生中斷時(shí)  

RB的門(mén) 才會(huì)顯示電壓






#include "configurations_bits.h"
#define  _XTAL_FREQ 4000000

void envoie (char nb); // 發(fā)送函數(shù)
void cal(char nb);       // 將數(shù)字轉(zhuǎn)化為時(shí)間
char sec=0,min=0;    // 表面變量 sec為秒  min為分鐘
bit c=0;
void timer1(void); //timer1


void main (void)
    {
    timer1();// 調(diào)用TIMER1

    SPBRG=25;         //設(shè)定串聯(lián)傳輸
    TXSTA=0x26;
    RCSTA=0x90;
    BAUDCTL=0x00;

    GIE=1;       //允許中斷
    PEIE=1;
    TMR1IE=1;

    while(1)
    {
        if(c==2) // 使用2x500ms 來(lái)獲得1S的周期
        {
        cal(min);  // 處理數(shù)字并發(fā)送
        envoie(0x3A); 發(fā)送  :
        cal(sec);   //處理數(shù)字并發(fā)送
        envoie(0x0D);//換行
        envoie(0x0A);
        sec++;// 計(jì)數(shù)
        if(sec==60)    //如果秒等于60 歸零
        {
          sec=0;
          min=min+1;
          if(min==60)
          {
              min=0;
          }
        }
        c=0; //歸零
        }
               
    }
    }

    void envoie (char nb)  //發(fā)送程序
    {
        TXREG=nb;
        while (TRMT==0);
    }

    void cal(char nb)  //處理并發(fā)送的·函數(shù)
    {
        short int a,b;
        a=nb/10;
        b=nb-a*10;
        envoie(a+0x30);
        envoie(b+0x30);
    }
               
void timer1(void) // 設(shè)定TIMER1周期500ms
{
    T1CON=0x31;
    TMR1L=0xDC;
    TMR1H=0x0B;
    TMR1IF=0;
}

void interrupt interruption (void) //中斷程序
{
    if(TMR1IF==1)
    {
     c=c+1;  
    TMR1L=0xDC;
    TMR1H=0x0B;
    TMR1IF=0;
    }
}



#include "configurations_bits.h"
#define  _XTAL_FREQ 4000000

void confi_can ();
void confi_port();
char can ();
bit valide=0;
void timer0 ();
void interrupt inter ();



void interrupt inter () // 中斷程序

{
    if(T0IF==1) // 中斷
    {
      TMR0=0; //重制 timer0
      T0IF=0;
      valide=1; // 決定值
    }
}
void main ()
{
    char a;

    confi_can ();  //設(shè)定can的寄存器
    confi_port();  //設(shè)定要用的門(mén)

    GIE=1;         // 允許中斷
    PEIE=1;
    ADIE=1;
    T0IE=1;

    timer0 ();     //timer0

    while(1)
    {
        if(valide==1) // 中斷后啟動(dòng)if函數(shù)
        {
            a = can(); 將can所獲得的值賦予a // 顯示電壓
        if((0<a)&&(a<=63))   
        {
            PORTB=0x01;
        }
        if((63<a)&&(a<=127))
        {
            PORTB=0x03;
        }
        if((127<a)&&(a<=191))
        {
            PORTB=0x07;
        }
        if((191<a)&&(a<=255))
        {
            PORTB=0x0f;
        }
        valide=0;   // 重置
        }



    }
}

void confi_can ()
{
    ADCON0=0b01000001;  //已AN0為模擬電位入口
    ADCON1=0b00000000;
    ANSEL=0b00000001;
    ANSELH=0b0000000;
}

void confi_port()  // B門(mén) 0 1 2 3 為出口 連接著led
{
    TRISA=0x01;   // AN0對(duì)應(yīng)A0 所以設(shè)定A0為入口
    PORTA= 0x00;
    TRISB=0xF0;
    PORTB=0x00;
}

char can ()        // can模塊函數(shù)
{
    GO = 1;
    while(ADIF==0);
    ADIF==0;
    return(ADRESH);
}

void timer0 () //timer0 函數(shù)
{
    OPTION_REG=0b10000111;
    TMR0=0;
    T0IF=0;
}



出現(xiàn)的問(wèn)題

第一個(gè)函數(shù) pic只會(huì)發(fā)送一個(gè) 16位 數(shù)值為86 的東西 然后 停下

第二個(gè)函數(shù)  連接在RB0 1 2 3 的燈根本不會(huì)亮。。。

作者: zl2168    時(shí)間: 2018-5-26 18:57
老師也沒(méi)有解決方法有兩種可能:一是老師水平較低;二是老師沒(méi)有空或不耐煩。大學(xué)生應(yīng)該以自學(xué)為主,越好的大學(xué)老師講得越少越簡(jiǎn)單,越差的大學(xué)老師講得越多越詳細(xì)。
作者: xa108262    時(shí)間: 2018-5-26 21:48
第一個(gè)函數(shù): 請(qǐng)檢查你的串口接線,注意,單片機(jī)的tx接電腦的rx,同時(shí),看下串口調(diào)試軟件的串口號(hào)是否正確
第二個(gè)函數(shù):可以在線看下,是不是模數(shù)轉(zhuǎn)換那里配置有問(wèn)題,導(dǎo)致while(ADIF==0);死住,出不來(lái)了

僅供參考




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1