亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chap8.c

?? 摩托羅拉Mc6811利程
?? C
字號:
// Chapter 8 6811 C programs// Jonathan W. Valvano// This software accompanies the book,// Embedded Microcomputer Systems: Real Time Interfacing// published by Brooks Cole, 1999// Program 8.1. The MC68HC812A4 Port J initialization.// MC68HC812A4 only// Program 8.3. Switch debouncing using C software.// MC68HC11A8void WaitPress(void){     while (PORTA&0x01);        // Loop here until switch is pressed      TOC5=TCNT+20000;    // 10ms delay      TFLG1=0x08;         // Clear OC5F     while((TFLG1&0x08)==0);} // wait for switch to stop bouncingvoid WaitRelease(void){     while ((PORTA&0x01)==0);        // Loop here until switch is released      TOC5=TCNT+20000;    // 10ms delay      TFLG1=0x08;         // Clear OC5F     while((TFLG1&0x08)==0); }   // wait for switch to stop bouncing// no ritual required// Program 8.5. Another example of switch debouncing using C software.// MC68HC11A8unsigned char ReadPA0(void){unsigned char old;  old=PORTA&0x01;   // Current value  TOC5=TCNT+20000;  // 10ms delay  TFLG1=0x08;       //  Clear OC5F   while((TFLG1&0x08)==0){  // unchanged for 10ms?     if(old<>(PORTA&0x01)){ // changed?       old=PORTA&0x01;   // New value        TOC5=TCNT+20000;  // restart delay       TFLG1=0x08; }     // Clear OC5F   }  return(old);}// no ritual required//Program 8.6. Switch debouncing using interrupts in C software.// MC68HC11A8// counts the number of button pushes// signal connected to IC3=PA0unsigned int count; // times pushed#define wait 20000  // bounce wait (cyc) #pragma interrupt_handler TOC5handler()void TOC5handler(void){    TMSK1=0x01;    // Arm IC3, disarm OC5    TFLG1=0x01;    // clear IC3F     if(PORTA&0x01==0) count++;} // new count if PA0=0 #pragma interrupt_handler TIC3handler()void TIC3handler(void){    TMSK1=0x08;   // Disarm IC3, Arm OC5    TOC5=TCNT+wait;    TFLG1=0x08;}   // clear OC5F void Ritual(void){     asm(" sei");  // make atomic      TMSK1=0x01;   // Arm IC3, disarm OC5     TFLG1=0x01;   // clear IC3F      TCTL2 = 0x01; // IC3F set on rising     count=0;      asm(" cli"); }// Program 8.7. Another example of switch debouncing using interrupts in C software.// MC68HC11A8// counts the number of button pushes// signal connected to IC3=PA0unsigned int count; // times pushedchar LastState; // looking for touch?// true means open, looking for a touch// false means closed, looking for release  #define wait 20000  // bounce wait (cyc) #pragma interrupt_handler TOC5handler()void TOC5handler(void){    TMSK1=0x01;    // Arm IC3, disarm OC5    TFLG1=0x01;}   // clear IC3F #pragma interrupt_handler TIC3handler()void TIC3handler(void){    if(LastState){       count++; // a touch has occurred        LastState=0;}     else       LastState=1; // release occurred    TMSK1=0x08;   // Disarm IC3, Arm OC5    TOC5=TCNT+wait;    TFLG1=0x08;}   // clear OC5F void Ritual(void){     asm(" sei");  // make atomic      TMSK1=0x01;   // Arm IC3, disarm OC5     TFLG1=0x01;   // clear IC3F      TCTL2 = 0x01; // IC3F set on rising     count=0;     LastState=PORTA&0x01;     asm(" cli"); }// Program 8.9. C software interface of a direct connection keyboard.// MC68HC11A8unsigned int KEY;    // current pattern #define wait 20000   // bounce time (cyc)void Ritual(void){     asm(" sei");     // make atomic      TMSK1=0x00;  // Disarm OC5     DDRC=0;          // PortC are inputs from the keyboard     PIOC=0x54;          // Input hndshk, fall, arm, STRB neg pulse     KeyBoard();     // Initially read      asm(" cli"); }void KeyBoard(void){     dummyRead=PIOC;  // read status     KEY=(PORTE<<8)+PORTCL;}  // Set global, clear STAF#pragma interrupt_handler IRQhandler()void IRQhandler(void){     PIOC=0x14;     // Disarm STAF      TMSK1=0x08;    // Arm OC5      TOC5=TCNT+wait;     TFLG1=0x08;}   // clear OC5F#pragma interrupt_handler TOC5handler()void TOC5handler(void){   TMSK1=0x00;  // Disarm OC5   PIOC=0x54;   // Rearm STAF    KeyBoard();} // Read keys, set LS374's// Program 8.10. C software interface of a direct connection keyboard using periodic polling.// MC68HC11A8unsigned int Key;     // current pattern #define period 20000  // 10ms pollingunsigned int KeyBoard(void){    return((PORTE<<8)+PORTC);} // patternvoid Ritual(void){    asm(" sei");  // make atomic     DDRC=0;       // inputs from keyboard    Key=KeyBoard();  // read 16 keys      TMSK1=0x08;      // Arm OC5     TOC5=TCNT+period;    TFLG1=0x08;      // clear OC5F      asm(" cli"); }#pragma interrupt_handler TOC5handler()void TOC5handler(void){      Key=KeyBoard();   // Current pattern     TOC5=TOC5+period;     TFLG1=0x08;}       // ack OC5F // Program 8.12. C software interface of a matrix scanned keyboard.// MC68HC11A8const struct Row{   unsigned char out;    unsigned char keycode[4];}#typedef const struct Row RowType;RowType ScanTab[5]={{   0x70, "abcd" },{   0xB0, "efgh" },{   0xD0, "ijkl" },{   0xE0, "mnop" },{   0x00, "    " }};void Ritual(void){ // PC3-PC0 are inputs    PIOC=0x40;     // CWOM=1     DDRC=0xF0;}    // PC7-PC4 are outputs/* Returns ASCII code for key pressed,    Num is the number of keys pressed     both equal zero if no key pressed */unsigned char Scan(unsigned int *Num){ RowType *pt; unsigned char column,key; int j;  (*Num)=0; key=0;    // default values    pt=&ScanTab[0];  while(pt->out){    PORTC=pt->out;  // select row     column=PORTC;   // read columns    for(j=3; j>=0; j--){      if((column&0x01)==0){         key=pt->keycode[j];         (*Num)++;}      column>>=1;} // shift into position     pt++; }  return key;}// Program 8.14. C software interface of a multiplexed keyboard.// MC68HC11A8// PC7-PC4 row output // PC3-PC0 column inputs unsigned char Key;    // current pattern unsigned char PreviousKey;  // 10ms ago #define period 20000        // 10 ms unsigned char KeyScan(void){      unsigned char key,row;    key=0;    // means no key pressed    for(row=0;row<16;row++){          PORTC=row<<4;  // Select row           if((PORTC&0x0F)!=0x0F){                key=PORTC^0x0F; }}       return(key);}void Ritual(void){     asm(" sei");   // make ritual atomic      DDRC=$F0;        PreviousKey=Key=KeyScan(); // read     TMSK1|=0x08;         // Arm OC5      TOC5=TCNT+wait;     TFLG1=0x08;         // clear OC5F      asm(" cli"); }#pragma interrupt_handler TOC5handler()void TOC5handler(void){ unsigned char NewKey;     NewKey=KeyScan(); // Current pattern       if(NewKey==PreviousKey) Key=NewKey;     PreviousKey=NewKey;     TOC5=TOC5+period;     TFLG1=0x08;}       // ack OC5F// Program 8.15. C software interface of a scanned LED display.// MC68HC11A8// PB7-PB0 output, 7 bit pattern // PC2-PC0 output, selects LED digit unsigned char code[3]; // binary codesstatic unsigned char select[3]={4,2,1};unsigned int index;    // 0,1,2#define OC5F 0x08#pragma interrupt_handler TOC5handler()void TOC5handler(void){   TFLG1=OC5F;      // Acknowledge    TOC5=TOC5+10000; // every 5 ms    PORTC=select[index]; // which LED?   PORTB=code[index];   // enable   if(++index==3) index=0;}void ritual(void) { asm(" sei");     // make atomic   index=0;   DDRC=0xFF;    // outputs   TMSK1|=OC5F;  // Arm OC5    TFLG1=OC5F;   // clear OC5F    TOC5=TCNT+10000; asm(" cli"); }// Program 8.16. C software interface of a multiplexed LED display.// MC68HC11A8unsigned int global; // 12 bit packed BCDconst struct LED{  unsigned char enable; // select   unsigned char shift;  // bits to shift    const struct LED *Next; };  // Link#typedef const struct LED LEDType;#typedef LEDType * LEDPtr;LEDType LEDTab[3]={{  0x04, 8, &LEDTab[1] },  // Most sig{  0x02, 4, &LEDTab[2] },{  0x01, 0, &LEDTab[0] }}; // least sigLEDPtr Pt;   // Points to current digit#define OC5F 0x08#pragma interrupt_handler TOC5handler()void TOC5handler(void){    TFLG1=OC5F;       // Acknowledge     TOC5=TOC5+10000;  // every 5 ms     PORTB=(Pt->enable)      +(global>>(pt->shift))<<4);    Pt=Pt->Next; }void ritual(void) { asm(" sei");        // make atomic     global=0;    TMSK1=OC5F;     // Arm OC5     Pt=&LEDTab[0];    TFLG1=OC5F;     // clear OC5F */    TOC5=TCNT+10000; asm(" cli"); }// Program 8.17. C software interface of an integrated LED display.// MC68HC11A8// PD3/MOSI = MC14489 DATA IN// PD4/SCLK = MC14489 CLOCK IN// PD5 (simple output) = MC14489 ENABLEvoid ritual(void) {     DDRD |= 0x38;  // outputs to MC14489    SPCR=0x50; // bit  meaning// 7 SPIE=0 no interrupts// 6 SPE=1  SPI enable// 5 DWOM=0 regular outputs// 4 MSTR=1 master// 3 CPOL=0 match timing with MC14489// 2 CPHA=0// 1 SPR1=0 E/2 is 1Mhz SCLK// 0 SPR0=0     PORTD|= 0x20; // ENABLE=1    PORTD&= 0xDF; // ENABLE=0    SPDR=0x01;    // hex format    while(SPSR&0x80)==0){};    PORTD|=0x20;} // ENABLE=1void LEDout(unsigned char data[3]){// 24 bit packed BCD    PORTD &= 0xDF;    // ENABLE=0    SPDR = data[2];   // send MSbyte    while(SPSR&0x80)==0){};    SPDR = data[1];   // send middle byte    while(SPSR&0x80)==0){};    SPDR = data[0];   // send LSbyte    while(SPSR&0x80)==0){};    PORTD |= 0x20;}   // ENABLE=1// Program 8.18. Helper function for a simple LCD display.void LCDOutDigit(unsigned char position, unsigned char data) { // position is 0x80, 0x40, 0x20, or 0x10  and data is the BCD digit	PORTB=0x0F&data;  // set BCD digit on the A-D inputs of the MC14543B	PORTB|=position;  // toggle one of the LD inputs high 	PORTB=0x0F&data;} // LD=0, latch digit into MC14543B// Program 8.19. C software interface of a simple LCD display.void LCDOutNum(unsigned int data){ unsigned int digit,num,i; unsigned char pos;      num=min(data,9999); // data should be unsigned from 0 to 9999      pos=0x10;   // position of first digit (ones)      for(i=0;i<4;i++){          digit=num%10; num=num/10; // next BCD digit 0 to 9          LCDOutDigit(pos,digit); pos=pos<<1;}}// Program 8.20. Bit-banged interface to a scanned LCD display.void LCDOut (unsigned char *pt) {unsigned int i;  unsigned char mask;     for(i=0;i<6;i++){         for(mask=0x80;mask;mask=mask>>1){  // look at bits 7,6,5,4,3,2,1,0          if((*pt)&mask) PORTB=1; else PORTB=0; // Serial data of the MC145000	    PORTB|=2;      // toggle the serial clock first high 	    PORTB&=0xFD;}  // then low       pt++; }}// Program 8.21. SPI interface to a scanned LCD display using a MC145000.// MC68HC11A8// PD3/MOSI = MC145000 DATA IN// PD4/SCLK = MC145000 CLOCK INvoid ritual(void) {     DDRD |= 0x18;  // outputs to MC145000     SPCR=0x50; }// bit  meaning// 7 SPIE=0 no interrupts// 6 SPE=1  SPI enable// 5 DWOM=0 regular outputs// 4 MSTR=1 master// 3 CPOL=0 match timing with MC14489// 2 CPHA=0// 1 SPR1=0 E/2 is 1Mhz SCLK// 0 SPR0=0 void LCDout(unsigned char data[6]){ unsigned int j;  for(j=5; j>=0 ; j--){    SPDR = data[j];   // Msbyte first    while(SPSR&0x80)==0){};}}// Program 8.22. Private functions for an HD44780 controlled LCD display.// MC68HC11A8// 1 by 16 char LCD Display (HD44780)//  ground = pin 1   Vss//  power  = pin 2   Vdd +5v//  10Kpot = pin 3   Vlc contrast adjust//  PB2    = pin 6   E  enable//  PB1    = pin 5   R/W 1=read, 0=write//  PB0    = pin 4   RS 1=data, 0=control//  PC0-7  = pins7-14 DB0-7 8 bit data#define LCDdata    1 // PB0=RS=1#define LCDcsr     0 // PB0=RS=0#define LCDread    2 // PB1=R/W=1#define LCDwrite   0 // PB1=R/W=0#define LCDenable  4 // PB2=E=1#define LCDdisable 0 // PB2=E=0void LCDcycwait(unsigned short cycles){    TOC5=TCNT+cycles; // 500ns cycles    TFLG1 = 0x08;     // clear C5F    while((TFLG1&0x08)==0){};}// Program 8.23. Public functions for an HD44780 controlled LCD display.// MC68HC11A8void LCDputchar(unsigned short letter){// letter is ASCII code    PORTC=letter;    PORTB=LCDdisable+LCDwrite+LCDdata;    PORTB=LCDenable+LCDwrite+LCDdata;  // E goes 0,1    PORTB=LCDdisable+LCDwrite+LCDdata; // E goes 1,0    LCDcycwait(80);} // 40 us waitvoid LCDputcsr(unsigned short command){    PORTC=command;    PORTB=LCDdisable+LCDwrite+LCDcsr;    PORTB=LCDenable+LCDwrite+LCDcsr;  // E goes 0,1    PORTB=LCDdisable+LCDwrite+LCDcsr; // E goes 1,0    LCDcycwait(80);} // 40 us waitvoid LCDclear(void){    LCDputcsr(0x01);   // Clear Display    LCDcycwait(3280);  // 1.64ms wait    LCDputcsr(0x02);   // Cursor to home    LCDcycwait(3280);} // 1.64ms waitvoid LCDinit(void){    DDRC=0xFF;    LCDputcsr(0x06);   // I/D=1 Increment, S=0 nodisplayshift    LCDputcsr(0x0C);   // D=1 displayon, // C=0 cursoroff, B=0 blinkoff    LCDputcsr(0x14);   // S/C=0 cursormove, R/L=0 shiftright    LCDputcsr(0x30);   // DL=1 8bit, N=0 1 line, F=0 5by7dots    LCDclear();}    // clear display// Program 8.27. C linked list and helper functions used to control the stepper motor.const struct State{   unsigned char Out;     /* Output for this state */    const struct State *Next[2]; /* Next state CW or CCW motion */};#typedef struct State StateType;#typedef StateType * StatePtr;unsigned char POS;  /* between 0 and 199 representing shaft angle */#define clockwise 0           /* Next index*/#define counterclockwise 1    /* Next index*/StateType fsm[4]={    {10,{&fsm[1],&fsm[3]}},    { 9,{&fsm[2],&fsm[0]}},    { 5,{&fsm[3],&fsm[1]}},    { 6,{&fsm[0],&fsm[2]}}};StatePtr Pt;  /* Current State */void CW(void){     Pt=Pt->Next[clockwise];    /* circulates around linked list */    PORTB=Pt->Out;              /* step motor */    if(POS++==200) POS=0;}       /* maintain shaft angle */ void CCW(void){    Pt=Pt->Next[counterclockwise]; /* circulates around linked list*/    PORTB=Pt->Out;                 /* step motor */    if(POS==0)POS=199;    else POS--; }               /* maintain shaft angle */void Init(void){    POS=0;    Pt=&fsm[0];}// Program 8.28. High-level C function to control the stepper motor.void SEEK(unsigned char New){ int CWsteps,i;     if((CWsteps=New-POS)<0)        CWsteps+=200;    if(CWsteps>100)        for(i=CWsteps;i<200;i++)           CCW();    else        for(i=0;i<CWsteps;i++)          CW(); }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色天天综合久久久久综合片| 亚洲成人黄色小说| 亚洲综合色婷婷| 日本午夜一区二区| 成人精品免费看| 日本成人在线一区| 成人性视频免费网站| 色综合亚洲欧洲| 国产亚洲欧洲997久久综合 | 91麻豆精品国产自产在线观看一区 | 亚洲国产视频网站| 亚洲精品写真福利| 国产精品18久久久久久vr| 成人福利电影精品一区二区在线观看| 777午夜精品免费视频| 日韩免费福利电影在线观看| 久久亚洲综合av| 精东粉嫩av免费一区二区三区| 91一区二区三区在线观看| 国产午夜精品一区二区三区视频| 亚洲激情自拍偷拍| 国产一区 二区 三区一级| 日韩欧美国产综合在线一区二区三区| 综合久久一区二区三区| 成人午夜精品一区二区三区| 91精品久久久久久蜜臀| 综合亚洲深深色噜噜狠狠网站| 奇米综合一区二区三区精品视频| 在线观看免费亚洲| 亚洲制服丝袜av| a级高清视频欧美日韩| 国产精品美女久久久久久久久| 理论电影国产精品| 欧美另类久久久品| 青青草97国产精品免费观看无弹窗版| 色天天综合色天天久久| 亚洲国产日韩av| 色综合中文字幕| 国产婷婷一区二区| 国产成人精品三级| 久久视频一区二区| 成人免费精品视频| 日本一区二区免费在线观看视频| 国产99久久久国产精品| 久久久久综合网| 丁香婷婷深情五月亚洲| 国产三级精品三级在线专区| 国产露脸91国语对白| 国产精品嫩草99a| 成人晚上爱看视频| 一区二区免费看| 欧美亚洲日本国产| 极品美女销魂一区二区三区免费| 日韩欧美中文一区二区| 亚洲电影一级片| 欧美电影免费观看高清完整版 | 日本韩国一区二区三区| 亚洲区小说区图片区qvod| 欧美日本一区二区在线观看| 亚洲成人在线免费| 欧美美女一区二区在线观看| 图片区小说区区亚洲影院| 欧美日韩dvd在线观看| 国产精品综合网| 亚洲国产精品激情在线观看| 欧美色图一区二区三区| 日韩主播视频在线| 国产免费成人在线视频| 91浏览器打开| 一卡二卡三卡日韩欧美| 欧美videos大乳护士334| 国产精品一二三四五| 亚洲国产精品综合小说图片区| 3d动漫精品啪啪一区二区竹菊| 国产美女一区二区| 亚洲品质自拍视频| 91丨九色丨蝌蚪丨老版| 激情深爱一区二区| 国产精品久久久久aaaa樱花 | 国产一区二区三区在线观看免费视频| 中文字幕五月欧美| 3atv一区二区三区| 黄色成人免费在线| 亚洲丝袜另类动漫二区| 538prom精品视频线放| 97se亚洲国产综合自在线不卡| 午夜天堂影视香蕉久久| 国产精品护士白丝一区av| 欧美久久免费观看| 91日韩在线专区| 激情文学综合网| 国产精品国产成人国产三级| 欧美色爱综合网| 成人午夜私人影院| 蜜桃久久av一区| 亚洲精品国产一区二区三区四区在线| 欧美性videosxxxxx| 国产精品一区二区不卡| 午夜精品视频一区| 亚洲人快播电影网| 中文字幕视频一区| 国产日韩在线不卡| 日韩欧美在线观看一区二区三区| 国内不卡的二区三区中文字幕| 亚洲国产日日夜夜| 国产精品欧美一区二区三区| 精品国产乱码久久久久久图片| 在线观看亚洲a| 欧美日韩一区高清| 色综合天天做天天爱| 一本久久a久久免费精品不卡| 国产一区二区精品久久| 国产精一品亚洲二区在线视频| 天天亚洲美女在线视频| 日韩电影在线免费| 亚洲精品伦理在线| 亚洲一卡二卡三卡四卡无卡久久 | 欧美一二三区在线观看| 色综合久久中文字幕| 色婷婷精品大在线视频 | 91在线小视频| 色综合天天性综合| 成人a级免费电影| 麻豆精品一区二区综合av| 久久国产视频网| 久久精品国产一区二区三区免费看| 免费观看久久久4p| 麻豆国产一区二区| 国产91精品入口| 国产精品18久久久久久久久久久久| 成人的网站免费观看| 懂色av中文字幕一区二区三区| 成人国产免费视频| 波多野结衣一区二区三区| 欧洲国内综合视频| 欧美乱妇一区二区三区不卡视频| www.成人网.com| 色欧美日韩亚洲| 91小视频在线| 欧美一区二区三区免费视频| 欧美美女一区二区三区| 久久精品一区蜜桃臀影院| 久久久久国产精品麻豆| 国产精品国产三级国产普通话三级 | 成人免费视频网站在线观看| 一本高清dvd不卡在线观看| 欧洲一区二区三区免费视频| 色视频成人在线观看免| 欧美日韩在线综合| 欧美天堂一区二区三区| 日韩三级精品电影久久久| 日本一区二区三区国色天香| 亚洲人吸女人奶水| 欧美激情一二三区| 国产剧情一区二区| 一区二区三区欧美亚洲| 亚洲欧美另类综合偷拍| 午夜精品影院在线观看| 激情综合网天天干| 欧美优质美女网站| 欧美成人a∨高清免费观看| 18欧美乱大交hd1984| 午夜免费久久看| 成人国产精品免费观看| 欧美挠脚心视频网站| 国产精品欧美久久久久无广告| 一区二区成人在线| 成人精品免费看| 69堂精品视频| 亚洲国产日日夜夜| 国产精品自拍网站| 91精品国产综合久久精品性色| 国产日韩精品一区二区三区| 日本不卡123| 99免费精品视频| xf在线a精品一区二区视频网站| 亚洲美女淫视频| 豆国产96在线|亚洲| 3atv一区二区三区| 亚洲国产精品久久久久婷婷884| 国产最新精品免费| 欧美成人伊人久久综合网| 亚洲欧美日韩成人高清在线一区| 国产一区免费电影| 欧美日韩精品一区二区三区四区| 国产精品美女久久久久久| 麻豆精品国产91久久久久久 | 亚洲乱码中文字幕| 国产一区二区三区在线看麻豆| 欧美日韩综合在线免费观看| 精品奇米国产一区二区三区| 亚洲精品国产成人久久av盗摄| 一本到不卡免费一区二区| 日韩一区二区三区视频在线观看| 亚洲国产欧美日韩另类综合 | 青青草原综合久久大伊人精品| 欧美性高清videossexo| 亚洲欧洲av在线| 99re成人精品视频| 中文字幕第一区二区|