5/18/2012

UART通訊控制IO程式

再加個碼吧。
剛剛那一篇發表的是程式庫,這一篇發表的是頭文件和應用程式。

理論上來說啦,我比較想用UART中斷來做,但如果用了中斷,就沒有辦法使用stdio.h的函數。所以只好用輪詢的方式,
再沒有更好的選擇之前,我也只能將就著用著了。

基於我個人的美感,這個程式有個問題。

我不知道該怎麼清除畫面,當在輸入第二次的時候,在終端機顯示的時候,並不會跳到第一行第一列,而是往下增加。
這不是很嚴重的BUG,只是我個人的美感不能接受而已。
不過,話說回來了……
不過就是MCU的程式,在終端機監控部份的UI這麼在意做什麼?
……
我還是不太能接受……

timerAPI.h
 /************************************************************************************************/
/*
本程式依照創用CC規範,也就是說,愛怎麼用就怎麼用,就算拿去賺錢,只要別讓我知道就好。
設計者:Ethan
設計日期:2012/5/5
程式功能:使用計時器,做出一個週期為兩秒的方波
*/

#ifndef   __timerAPI_H__
#define   __timerAPI_H__


//程式功能:內部計時,TR啟動,
//DelayX1msTimer1Mode0 == Timer1,Mode0 1ms延遲產生程式;
extern void DelayX1msTimer0Mode0(unsigned int count);

//程式功能:內部計時,TR啟動,
//DelayX1msTimer0Mode0 == Timer0,mode0 1ms延遲產生程式;
extern void DelayX1msTimer0Mode1(unsigned int count);

//程式功能:內部計時,TR啟動,
//DelayX1msTimer0Mode0 == Timer0,mode0 1ms延遲產生程式;
extern void DelayX1msTimer1Mode1(unsigned int count);

//程式功能:內部計時,TR啟動,
//DelayX1msTimer1Mode0 == Timer1,Mode1 1ms延遲產生程式;
extern void DelayX1msTimer1Mode0(unsigned int count);

//程式功能:內部計時,TR啟動,溢位自動載入
//DelayX1msTimer2      == Timer0,mode0 1ms延遲產生程式;
//8052專屬程式,當需要使用這個函數的時候,請記得加上
//『#define AT8052』這一行指令

#ifdef AT8052
extern void DelayX1msTimer2(unsigned int count);
#endif

#endif 

 main.c
 /************************************************************************************************/
#include
#include
#include
#include"timer\timerAPI.h"
//#include"time\DelayX1msTimer0Mode1.c"

//char uart_data;

extern void Timer2InterupUART(void);
//extern void DelayX1msTimer0Mode1(unsigned int count);

void main (void){
    char input;
    char *c_input;
    char page2;
//    TMOD = 0x01;   
    Timer2InterupUART();
    P1 =0x00;

       TI=1;
    printf("\n");
       printf("*******Welcome*******\n");
       printf("Select function:\n");
    printf("a. port0 on \n");
    printf("b. port1 on \n");
    printf("c. port3 on \n");
    printf("d. next page \n");

       scanf("%c",&input);     
    printf("\n",input);


       printf("*******Power cycle*******\n");   
    printf("a. port0 on 100ms , off 5s \n");

       scanf("%c",&page2);     
    printf("\n",page2);
   
    //scanf("%s",&c_input);
    //printf("\n %s",page2);

   
   while(RI==0){
        switch(input){
        case 'a':
            //11111110
            //P1=0xFE;
            //00000001
            P1=0x01;
            break;
        case 'b':
            //11111101
            //P1=0xFD;
            //00000010
            P1=0x02;
            break;
        case 'c':
            //11110111
            //P1_3=0xF7;
            //00001000
            P1=0x08;
            break;
        }
        switch(page2){
        case 'a':
            P1=0x01;
            DelayX1msTimer0Mode1(5000);
            P1=0x00;
            DelayX1msTimer0Mode1(50000);
            break;
        }

  
   } // endless
 
}
Google
Creative Commons License markscat的異想世界markscat製作,以創用CC 姓名標示-非商業性-相同方式分享 2.5 台灣 授權條款釋出。