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

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

?? pic模擬異步串行通訊uart.txt

?? 模擬異步串行通信
?? TXT
字號:
PIC模擬異步串行通訊UART

用TMR0實現定時查詢。任何帶中斷的PIC上都可以實現。可用此法擴展多個串口。

;|--------------------------------------------------------------|
;|  Implement duplex USART base on normal I/O pin               |
;|  Using TIMER0 interrupt for bit timing                       |
;|  Tested on PIC16F83 running at 4MHz                          |
;|  Written by Paul Zhang Microchip Tech Inc                   |
;|  6 Aug 2000                                                 |
;|  All rights reserved                                         |
;|--------------------------------------------------------------|

世紀開發網(www.21kf.com)版權所有,轉載請注明!
    errorlevel    -302    ;no bank warning
    errorlevel    -301    ;no default file warning
    
    list      p=16F83    ;define processor
    #include <p16F83.inc>    ;

    __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
    ;code protect         =    OFF
    ;watchdog         =    OFF
    ;power-up delay timer     =    ON
    ;oscillator mode     =    XT

;===============================
;define RAM variables
    cblock    0x0c        ;GPR start from 0x0c
w_temp                ;W context saving during interrupt
status_temp            ;STATUS context saving during interrupt
pclath_temp            ;PCLATH context saving during interrupt

USART_F                ;containing flags for USART
RX_BUFF                ;USART received data buffer
TX_BUFF                ;USART transmitting data buffer
RX_SLICE            ;RX bit-timing control
TX_SLICE            ;TX bit-timing control
RX_bcnt                ;RX received bit counting
TX_bcnt                ;TX transmitting bit counting
RX_STA                ;RX STATE-MACHINE controller
TX_STA                ;TX STATE-MACHINE controller
    endc

;===============================
;pre-definition for readability
#define    RX_PIN    PORTA2        ;assign RX pin
#define    TX_PIN    PORTA3        ;assign TX pin
#define    TXEN    USART_F0    ;USART transmit enable
#define    TXBUSY    USART_F1    ;USRAT transmit is in progress
#define    RXBF    USART_F2    ;USART receive buff full
#define    RXBUSY    USART_F3    ;USART receive is in progress
#define    RX_ERR    USART_F4    ;USART receive error
#define    TX_ERR    USART_F5    ;USART transmit error

;===============================
;define constant
#define    OSC_FREQ    .4000    ;oscillator frequency in KHz
#define    BAUDRATE    .2400
#define TMR0CONST    .118    ;256-OSC_FREQ*1000/4/(BAUDRATE*3) + 2

;===============================
;for my personal style
#define    skp0    btfsc
#define    skp1    btfss

;**********************************************************************
        ORG     0x000
        clrwdt
          goto    MAIN        ; go to beginning of program


;=======================================
;Interrupt service routine
        ORG     0x004        ; interrupt vector location

        movwf   w_temp        ; save off current W register contents
        movf    STATUSw    ; move status register into W register
        banksel    status_temp
        movwf    status_temp    ; save off contents of STATUS register
        movf    PCLATHw
        movwf    pclath_temp    ; save off contents of PCLATH

        banksel    INTCON        ;select bank
        skp0    INTCONT0IF    ;test for TMR0 interrupt
        goto    tmr0IntStart    ;do TMR0 ISR
        ;here test for any other interrupt source
        goto    int_end

tmr0IntStart                ;TIMER0 interrupt service
        bcf    INTCONT0IF    ;clear T0IF
        
        ;====== start of RX =======
        movlw    high($)
        movwf    PCLATH        ;set PCLATH before PCL change
        movf    RX_STAw    ;get the state value for RX
        andlw    0x03        ;for safeguard purpose
        addwf    PCLf        ;switch to STATE
        goto    rxStartChk    ;check for START bit
        goto    rxReceiveBit    ;receive DATA bit
        goto    rxIdle        ;wait for idle
        goto    rxEnd        ;do nothing
rxStartChk    ;check for START bit
        skp0    RX_PIN        ;test RX pin for START bit
        goto    rxEnd        ;not found
        ;start bit found. do following
        movlw    .8
        movwf    RX_bcnt        ;count for 8 bits incoming data
        movlw    .4
        movwf    RX_SLICE    ;wait 4 time-slice for 1st data bit
        movlw    .1
        movwf    RX_STA        ;switch to STATE 1 for 1st data bit sampling
        goto    rxEnd
rxReceiveBit    ;receive DATA bit
        decfsz    RX_SLICEf    ;wait of bit timing
        goto    rxEnd
        ;time to sample incoming data bit
        rrf    RX_BUFFf    ;right shift for new bit space
        bcf    RX_BUFF7    ;pre-set to 0
        skp0    RX_PIN        ;incoming data bit test
        bsf    RX_BUFF7    ;set if data bit = 1
        movlw    .3        ;3 slice for data bit timing
        movwf    RX_SLICE    ;bit timing for next data bit
        decfsz    RX_bcntf    ;see if 8-bit completed
        goto    rxEnd
        ;bit receive completed do follwoing
        movlw    .2
        movwf    RX_STA        ;set to STATE 2 for idle waiting
        bsf    RXBF        ;set receive buffer full
        movf    RX_BUFFw    ;display data on PORTB
        movwf    PORTB
        goto    rxEnd
rxIdle        ;wait for idle
        skp0    RX_PIN        ;try to find STOP bit
        clrf    RX_STA        ;back to STATE 0 for next byte
        goto    rxEnd
        ;====== End of RX =========
rxEnd
        ;====== start of TX =======
        ;do TX if transmit is engaged
        skp1    TXEN        ;skip if TXEN set do TX
        goto    tmr0IntEnd    ;not in transmit mode
        movf    TX_SLICEf    ;see if in bit-timing delay
        skpnz            ;
        goto    txDo        ;bit-timing completed
        decfsz    TX_SLICEf    ;keep bit-timing delay
        goto    txEnd
txDo
        ;Transmit STATE-MACHINE control
        movlw    high($)
        movwf    PCLATH        ;set PCLATH before PCL change
        movf    TX_STAw    ;get current state
        andlw    0x03        ;make sure in range
        addwf    PCLf        ;switch to TX STATE
        goto    txStartBit    ;send START bit
        goto    txDatBit    ;send DATA bit
        goto    txStop        ;send STOP bit
        goto    txIdle        ;set transtim IDLE
txStartBit    ;TX_STA=0 send START bit here
        bsf    TXBUSY        ;set TX busy flag
        movlw    .8
        movwf    TX_bcnt        ;count for 8 bit transmitting
        bcf    TX_PIN        ;start bit
        movlw    .3
        movwf    TX_SLICE    ;set bit timing
        movlw    .1
        movwf    TX_STA        ;set transmit STATE-MACHINE
        goto    txEnd
txDatBit    ;TX_STA=1 send DATA bit here
        ;time for next bit sending
        rrf    TX_BUFFf    ;rotate bit to C
        skpnc            ;test C
        goto    $+3
        bcf    TX_PIN        ;0 out
        goto    $+2
        bsf    TX_PIN        ;1 out
        movlw    .3
        movwf    TX_SLICE    ;wait 3 time-slices
        decfsz    TX_bcntf
        goto    txEnd        ;8 bit serial not end
        movlw    .2
        movwf    TX_STA        ;set transmit STATE-MACHINE
        goto    txEnd
txStop        ;TX_STA=2 send STOP bit here
        bsf    TX_PIN        ;send STOP bit
        movlw    .3
        movwf    TX_SLICE    ;set bit timing
        movlw    .3
        movwf    TX_STA        ;set transmit STATE-MACHINE
        goto    txEnd
txIdle        ;TX_STA=3 reset transmission to IDLE
        bcf    TXBUSY        ;not busy
        bcf    TXEN        ;not in transmission
        clrf    TX_STA        ;reset transmit STATE-MACHINE
        goto    txEnd
        ;====== End of TX =========
txEnd
        ;add more TMR0 related code here
tmr0IntEnd
        movlw    TMR0CONST
        addwf    TMR0f
        goto    int_end

int_end
        banksel    pclath_temp
        movf    pclath_tempw    ; retieve copy of PCLATH register
        movwf    PCLATH
        movf    status_tempw    ; retrieve copy of STATUS register
        movwf    STATUS        ; restore pre-isr STATUS register contents
        swapf   w_tempf
        swapf   w_tempw    ; restore pre-isr W register contents
        retfie            ; return from interrupt


;=======================================
;Code wriiten for test purpose
MAIN
        banksel    TRISA        ;select respective bank
        movlw    b'00000100'    ;RA2-input RA3-output
        movwf    TRISA
        clrf    TRISB
        movlw    b'10001000'    ;TMR0 in timer mode
        movwf    OPTION_REG
        clrf    STATUS        ;make sure in bank 0

        call    USART_INIT

        movlw    TMR0CONST
        movwf    TMR0

        movlw    0xff
        movwf    PORTB

        bsf    INTCONT0IE
        bsf    INTCONGIE
        
LOOP                    ;test code
        skp1    RXBF        ;wait for data received
        goto    $-1
        bcf    RXBF        ;clear data flag
        movf    RX_BUFFw
        movwf    TX_BUFF        ;send back received data
        bsf    TXEN
        skp0    TXEN        ;wait for transmit completion
        goto    $-1
        goto    LOOP        ;



;=======================================
;Initializtion of software USART
USART_INIT
        clrf    USART_F        ;clear all flag bit
        clrf    RX_STA        ;reset STATE MACHINE
        clrf    TX_STA
        bsf    TX_PIN        ;TX is in Idle
        return


        END                     ;


世紀開發網(www.21kf.com)版權所有,轉載請注明!

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
五月天激情小说综合| 亚洲精品在线电影| 国产乱人伦偷精品视频免下载| 亚洲人成精品久久久久久| 日韩一区和二区| 欧美在线制服丝袜| 国产1区2区3区精品美女| 日本v片在线高清不卡在线观看| 国产精品国产自产拍高清av王其| 欧美一区二区三区在线| 色av综合在线| 不卡一区在线观看| 国产激情一区二区三区| 久久精品国产澳门| 午夜精品一区在线观看| 《视频一区视频二区| 日韩免费福利电影在线观看| 欧美色中文字幕| 99久久久国产精品| 美女精品一区二区| 午夜电影久久久| 一区二区三区四区不卡在线| 国产精品污网站| 国产午夜精品在线观看| 欧美一卡2卡三卡4卡5免费| 欧美日韩视频在线观看一区二区三区| xnxx国产精品| 日韩精品在线一区| 在线综合视频播放| 欧美日韩在线播| eeuss鲁片一区二区三区在线看| 国内成人精品2018免费看| 日韩精品成人一区二区在线| 中文字幕综合网| 中文字幕一区不卡| 久久精品人人做人人综合 | 欧美午夜电影在线播放| 国产福利一区在线| 国产91丝袜在线18| 久久国产精品免费| 天堂精品中文字幕在线| 午夜精品久久久久久久蜜桃app| 亚洲综合图片区| 一区二区三区视频在线看| 亚洲一区二区三区三| 首页综合国产亚洲丝袜| 一二三区精品福利视频| 亚洲色图一区二区三区| 亚洲区小说区图片区qvod| 亚洲精品日韩专区silk| 亚洲自拍与偷拍| 欧美bbbbb| 国产伦精品一区二区三区视频青涩 | 国产清纯白嫩初高生在线观看91| 国产亚洲欧美日韩俺去了| 久久综合久久综合九色| 久久精品一区二区三区不卡牛牛| 精品成a人在线观看| 精品av久久707| 国产精品久久久久7777按摩| 亚洲男人天堂av| 五月天婷婷综合| 国产在线观看免费一区| 久久精品亚洲精品国产欧美| 中文字幕一区二区三区色视频| 一区二区三区av电影| 久热成人在线视频| 岛国一区二区三区| 欧美午夜一区二区三区| 欧美精品xxxxbbbb| 国产午夜精品一区二区| 日韩一区日韩二区| 午夜精品久久久久久久99樱桃| 免费在线观看一区二区三区| 国产成人精品三级| 一本一道综合狠狠老| 日韩视频在线你懂得| 久久夜色精品一区| 亚洲色图第一区| 青青草国产成人99久久| 99视频在线精品| 欧美一区二区在线不卡| 国产精品视频麻豆| 日本欧美肥老太交大片| 国产99久久久久| 欧美色网一区二区| 国产欧美视频一区二区| 亚洲男人的天堂一区二区 | 亚洲电影在线免费观看| 国产一区二区美女| 欧美日韩亚洲综合| 国产精品美女久久久久高潮| 日本在线不卡视频| 成人黄色在线视频| 日韩欧美在线网站| 玉足女爽爽91| 国产suv精品一区二区883| 91精品国产一区二区三区蜜臀| 国产精品国产三级国产aⅴ入口| 日韩av一区二| 亚洲国产视频a| 成人白浆超碰人人人人| 精品久久久久久亚洲综合网| 亚洲国产cao| 91麻豆蜜桃一区二区三区| 久久久噜噜噜久久中文字幕色伊伊 | 日韩一卡二卡三卡四卡| 亚洲一区在线观看视频| 成人午夜激情影院| 日本久久一区二区| 中文字幕av一区 二区| 日产欧产美韩系列久久99| 91在线无精精品入口| 欧美激情一二三区| 国内久久婷婷综合| 91精品国产综合久久香蕉麻豆| 一区二区免费看| 色婷婷综合久久久久中文一区二区 | 欧美日韩在线综合| 国产精品不卡一区二区三区| 国产一区二区三区在线观看精品| 91精品视频网| 日韩黄色一级片| 欧美日韩一区二区三区不卡| 一区二区三区欧美在线观看| bt7086福利一区国产| 国产精品久久久久久久裸模| 国产福利一区二区三区视频在线| 男人的天堂亚洲一区| 欧美浪妇xxxx高跟鞋交| 性感美女极品91精品| 欧美精品三级在线观看| 亚洲国产精品尤物yw在线观看| 欧美亚日韩国产aⅴ精品中极品| 亚洲视频每日更新| 丰满岳乱妇一区二区三区| 国产女人18水真多18精品一级做| 韩国成人福利片在线播放| 久久久精品蜜桃| 国产传媒欧美日韩成人| 亚洲国产精品二十页| av在线综合网| 亚洲制服丝袜一区| 欧美日韩日日骚| 日本在线不卡视频一二三区| 欧美电影免费观看完整版| 狠狠色丁香婷婷综合久久片| 久久免费视频一区| 成人免费视频caoporn| 国产精品国产三级国产普通话99| 91在线国内视频| 怡红院av一区二区三区| 在线观看网站黄不卡| 香蕉成人啪国产精品视频综合网| 欧美亚日韩国产aⅴ精品中极品| 亚洲精品高清在线观看| 色香蕉成人二区免费| 亚洲bt欧美bt精品| 久久久久88色偷偷免费| 狠狠狠色丁香婷婷综合激情 | 在线日韩国产精品| 亚洲自拍都市欧美小说| 欧美久久久久久久久中文字幕| 日产精品久久久久久久性色| 久久久久久久久久美女| 国产欧美日韩另类视频免费观看| 91麻豆国产福利在线观看| 婷婷中文字幕综合| 国产亚洲欧美在线| 色婷婷av一区二区| 久久99精品一区二区三区| 国产精品女主播在线观看| 欧美日韩国产成人在线91| 精品一区二区日韩| 亚洲精品成人a在线观看| 精品国精品国产| 99在线精品一区二区三区| 亚洲.国产.中文慕字在线| 精品国产一区二区三区久久久蜜月 | 国产精品视频一二三| 欧美日韩久久一区二区| 久久精品国产澳门| 综合久久给合久久狠狠狠97色| 91精品视频网| 97精品国产97久久久久久久久久久久| 五月综合激情网| 国产精品超碰97尤物18| 精品久久久久久综合日本欧美| 色噜噜偷拍精品综合在线| 激情五月婷婷综合网| 亚洲午夜久久久久久久久电影院| 2020国产成人综合网| 亚洲久本草在线中文字幕| 欧美tickling网站挠脚心| 成人激情小说网站| 美女诱惑一区二区| 亚洲福利视频一区二区| 久久品道一品道久久精品| 91精品久久久久久蜜臀| 91精彩视频在线观看|