男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

機電之家資源網(wǎng)
單片機首頁|單片機基礎(chǔ)|單片機應用|單片機開發(fā)|單片機文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓信息
贊助商
純軟件單片機串口
純軟件單片機串口
 更新時間:2008-7-26 20:30:52  點擊數(shù):3
【字體: 字體顏色

純軟件單片機串口(一)

                 ;Definition of variables
SEND_READ    EQU     00H    ;Bit for write(0) or read(1)
SEND_ENDS    EQU     01H    ;Bit for communiciating(1) or ends(0)
READ_ENDS    EQU     02H    ;Bit for reading(1) or ends(0)
BAUD_RAM_H   EQU     30H    ;Communite baud TH
BAUD_RAM_L   EQU     31H    ;Communite baud TL
AMEND_RAM_L  EQU     32H
AMEND_RAM_H  EQU     33H

SEND_CODE    EQU     34H    ;Byte  that  may be send
READ_CODE    EQU     34H    ;Read  ends value byte
READ_BUFF    EQU     35H    ;Read  bit  RRC
SEND_COUNT   EQU     36H    ;Send  bit  count
READ_COUNT   EQU     36H    ;Read  bit  count
SEND_FLAG    EQU     37H    ;Send  byte flag (0-->start send)
                 ;Definition of constants
TXD          EQU     P1.6   ;TXD  line
RXD          EQU     P3.2   ;RXD  line
BAUD_H       EQU     0FFH   ;9600   4800   2400   1200   600    300
BAUD_L       EQU     0A3H   ;FFA0   FF40   FE80   FD00   FA00   F400  AMEND=03H
AMEND_H      EQU     00H    ;0000   0040   0080   0100   0200   0400
AMEND_L      EQU     00H    ; 20H    40H    80H   100H   200H   400H

                ORG     0000H
                SJMP    MAIN
                ORG     0003H
                LJMP    INPUT_INT
                ORG     000BH
                LJMP    COMM_INT
                ORG     0013H
                LJMP    READ_BYTE_INT
                ORG     0040H
MAIN:           MOV     IE,#00H
                MOV     SP,#60H
                MOV     P1,#0FFH
                MOV     P3,#0FFH

                MOV     R1,#20H         ;Clr   CPU   RAM
                MOV     R2,#40H
       LOOP:    MOV     @R1,#00H
                INC     R1
                DJNZ    R2,LOOP

                MOV     BAUD_RAM_H,#BAUD_H
                MOV     BAUD_RAM_L,#BAUD_L
                MOV     AMEND_RAM_H,#AMEND_H
                MOV     AMEND_RAM_L,#AMEND_L
                MOV     TMOD,#01H
                MOV     TH0,BAUD_RAM_H
                MOV     TL0,BAUD_RAM_L
                SETB    ET0
                SETB    PT0
                SETB    EX0                     ;Read int
                SETB    PX0
                SETB    IT0
                SETB    EX1
                ;SETB    IT1
                SETB    EA
                CLR     SEND_READ
                MOV     SEND_FLAG,#0FFH
                SETB    TR0

                LCALL   SEND_TEST_CODE
                LCALL   SEND_LOOP
                ;LCALL   READ_ONE
                LCALL   READ_STRING
                LCALL   ONLY_READ

;************************************
ONLY_READ:      MOV     R0,#40H
                CLR     SEND_READ
                MOV     SEND_FLAG,#0FH
READ_LOOP_1:    MOV     R7,#20H
                MOV     R0,#40H
READ_LOOP_0:    SETB    READ_ENDS
                JB      READ_ENDS,$
                MOV     @R0,READ_CODE
                INC     R0
                MOV     A,READ_CODE
                CJNE    A,#3FH,NEXT_0_0
                LJMP    SEND_EX
NEXT_0_0:       DJNZ    R7,READ_LOOP_0
                LJMP    READ_LOOP_1
SEND_EX:        MOV     R0,#40H
                MOV     R7,#20H
                CLR     SEND_READ
SEND_LOOP_0:    MOV     SEND_CODE,@R0
                MOV     SEND_FLAG,#00H
                INC     R0
                SETB    SEND_ENDS
                JB      SEND_ENDS,$
                MOV     A,SEND_FLAG
                CJNE    A,#03H,READ_LOOP_1
                DJNZ    R7,SEND_LOOP_0
                LJMP    READ_LOOP_1
                RET

;************************************
SEND_LOOP:      MOV     SEND_CODE,#3DH
SEND_R:         MOV     SEND_FLAG,#00H
                SETB    SEND_ENDS
                JB      SEND_ENDS,$
                MOV     A,SEND_FLAG
                CJNE    A,#03H,N1
                SJMP    SEND_LOOP
N1:            SETB    READ_ENDS
                JB      READ_ENDS,$
                MOV     SEND_CODE,READ_CODE
                SJMP    SEND_R
                RET
;************************************
READ_ONE:       MOV     SEND_FLAG,#0AH
RRR1:           SETB    READ_ENDS
                JB      READ_ENDS,$
                MOV     SEND_CODE,READ_CODE
                MOV     SEND_FLAG,#00H
                SETB    SEND_ENDS
                JB      SEND_ENDS,$
                SJMP    RRR1
                RET
;***********************************
READ_STRING:    CLR     SEND_READ
READ:           MOV     SEND_FLAG,#0FH
                MOV     R1,#40H
                MOV     R2,#00H
READ_LOOP:      SETB    READ_ENDS
                JB      READ_ENDS,$
                MOV     @R1,READ_CODE
                INC     R1
                INC     R2
                MOV     A,READ_CODE
                CJNE    A,#3FH,NEXT1
                SJMP    SEND
NEXT1:         CJNE    R2,#20H,READ_LOOP

SEND:           MOV     R1,#40H
SEND_L:        MOV     SEND_FLAG,#00H
                MOV     SEND_CODE,@R1
                SETB    SEND_ENDS
                JB      SEND_ENDS,$
                MOV     A,SEND_FLAG
                CJNE    A,#03H,READ
                INC     R1
                DJNZ    R2,SEND_L
                SJMP    READ
                RET

;******************************
SEND_TEST_CODE: MOV     R6,#61H
                MOV     R7,#1AH
                CLR     SEND_READ
    SEND_LOOP1: MOV     SEND_CODE,R6
                MOV     SEND_FLAG,#00H
                SETB    SEND_ENDS
                INC     R6
                JB      SEND_ENDS,$
                DJNZ    R7,SEND_LOOP1
                RET
;**********************************************************
READ_BYTE_INT:  MOV     @R1,READ_CODE
                RETI


;*********************************************************************
;* SEND_READ    EQU     01H    Bit for send(0) or read(1)            *
;* SEND_ENDS    EQU     02H    Bit for communiciating(1) or ends(0)  *
;* READ_ENDS    EQU     03H    Bit for reading(1) or ends(0)         *
;* SEND_COED    EQU     31H    Byte  that  may be send               *
;* READ_CODE    EQU     32H    Read  ends value byte                 *
;* SEND_COUNT   EQU     33H    Send  bit  count                      *
;* READ_COUNT   EQU     33H    Read  bit  count                      *
;* READ_BUFF    EQU     34H    Read bit circulate                    *
;* SEND_FLAG    EQU     34H    Send  byte  flag (0-->start send)     *
;*                                                                   *
;* BAUD_RAM_H   EQU     35H    Communite buad TH                     *
;* BAUD_RAM_L   EQU     36H    Communite buad TL                     *
;* AMEND_RAM_H  EQU     37H    Read interrupt amend value            *
;* AMEND_RAM_L  EQU     38H    Read interrupt amend value            *
;* TXD          EQU     P1.4   Data TXD  line                        *
;* RXD          EQU     P1.3   Data RXD  line                        *
;* When send: MOV     SEND_CODE,Value_byte (Byte that will be send)  *
;*            MOV     SEND_FLAG,#00H                                 *
;*            SETB    SEND_ENDS                                      *
;*      if SEND_ENDS is 0 that shows completed send communiciation   *
;*      if SEND_FLAG isn't 03H that shows send communicating has     *
;*         beed interrupted by read_input,must jump to prosses       *
;*         read_input program.                                       *
;* When read: SETB    READ_ENDS                                      *
;*            SETB    EX0                                            *
;*      if READ_ENDS is 0 that shows completed read communiciation   *
;*         and return the value byte to READ_CODE.                   *
;*        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        *
;*        %   PROGRAM      INITIALIZE       %                        *
;*        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                        *
;* Timer 0(or 1,2)must be worked with mode 1.                        *
;* INT_timer_0 and INT_exterior_0 be necessitated corwning priority. *
;*                  CPU Clock is 11.0592M                            *
;*         Baud rate:  9600   4800    2400    1200    600     300    *
;*       Timer value:  FFA0H  FF40H   FE80H   FD00H   FA00H   F400H  *
;*   Start bit amend:  0000H  0040H   0080H   0100H   0200H   0400H  *
;*          Timer value amend is 03H                                 *
;*                                                                   *
;*                   AUTHOR:  Chen Muquan                            *
;*                        1998.2.24                                  *
;*                                                                   *
;*********************************************************************
COMM_INT:       PUSH    ACC
                PUSH    PSW
                MOV     A,TL0                   ;================
                ADD     A,BAUD_RAM_L
                MOV     TL0,A                   ;================
                MOV     TH0,BAUD_RAM_H          ;================
                JB      SEND_READ,READ_DATA     ;0 Send or 1 Read

          ;********  Send communicating   **********
                MOV     A,SEND_FLAG             ;Process send flag
                CJNE    A,#00H,COMM_NEXT1       ;Send  start bit
                CLR     TXD                     ;One start_bit low
                INC     SEND_FLAG
                MOV     SEND_COUNT,#08H
                POP     PSW
                POP     ACC
                RETI
  COMM_NEXT1:   CJNE    A,#01H,COMM_NEXT2       ;Send circulation
                MOV     A,SEND_CODE
                RRC     A
                MOV     TXD,C
                MOV     SEND_CODE,A
                DJNZ    SEND_COUNT,COMM_EXIT    ;circulation  end
                INC     SEND_FLAG
                POP     PSW
                POP     ACC
                RETI
  COMM_NEXT2:   CJNE    A,#02H,COMM_EXIT        ;Send stop bit
                SETB    TXD                     ;One stop_bit high
                INC     SEND_FLAG
                CLR     SEND_ENDS               ;completed send communication
COMM_EXIT:      POP     PSW
                POP     ACC
                RETI
         ;*********  Read communicating  **********
READ_DATA:      MOV     A,READ_BUFF
                MOV     C,RXD
                RRC     A
                MOV     READ_BUFF,A
                DJNZ    READ_COUNT,READ_EXIT    ;Completed read
                MOV     READ_CODE,A             ;Write read data byte
                CLR     READ_ENDS               ;Completed  read  communicate
                CLR     IE0                     ;Setup for read next byte
                SETB    EX0                     ;Enable read interrupt
                CLR     SEND_READ               ;Setup send status
                SETB    IE1
READ_EXIT:      POP     PSW
                POP     ACC
                RETI
;*******************************************************************
;*   The following subroutine is a exterior interrupt serve on     *
;*                  communiciated interrupt                        *
;*******************************************************************
INPUT_INT:      PUSH    ACC
                PUSH    PSW
                CLR     EX0             ;=======================
                CLR     SEND_ENDS       ;Interrup send commiciating
                MOV     SEND_FLAG,#0AH  ;Alter the send_flag for main program
                SETB    TXD

                CLR     TR0             ;Setup for read
                SETB    SEND_READ       ;Set INI_timer status for read
                MOV     READ_COUNT,#08H
                MOV     A,BAUD_RAM_L    ;Amend  start  bit  clock  cycle
                SUBB    A,AMEND_RAM_L
                MOV     TL0,A
                MOV     A,BAUD_RAM_H
                SUBB    A,AMEND_RAM_H
                MOV     TH0,A
                SETB    TR0
                CLR     TF0
                POP     PSW
                POP     ACC
                RETI

        END

 


純軟件單片機串口(二)
這是另外一個使用中斷查尋的程序!
www.ubicom.com or  www.scenix.com
到UBICOM看看 , 那里的串口都是純軟件的 

SEND_READ    EQU     01H    ;Bit for write(0) or read(1)
SEND_ENDS    EQU     02H    ;Bit for communiciating(1) or ends(0)  
READ_ENDS    EQU     03H    ;Bit for reading(1) or ends(0)
READ_INT     EQU     04H    ;Bit intettupt sending to reading
BUAD_RAM_H   EQU     30H    ;Communite buad TH
BUAD_RAM_L   EQU     31H    ;Communite buad TL
SEND_TIME    EQU     32H    ;Send int times count
READ_TIME    EQU     33H    ;Read int times count
SEND_CODE    EQU     34H    ;Byte  that  may be send
READ_CODE    EQU     35H    ;Read  ends value byte
READ_BUFF    EQU     36H    ;Read  bit  RRC
SEND_COUNT   EQU     37H    ;Send  bit  count
READ_COUNT   EQU     38H    ;Read  bit  count
SEND_FLAG    EQU     39H    ;Send  byte flag (0-->start send)
READ_FLAG    EQU     3AH    ;Read  byte flag (0-->check start bit)
TXD_LINE     EQU     P3.1;P1.6   ;TXD  line
RXD_LINE     EQU     P3.0;P3.2   ;RXD  line
BUAD_H       EQU     0FFH   ;9600   4800   2400   1200   600    300
BUAD_L       EQU     0C3H   ;FFE0   FFC0   FF80   FF00   FE00   FC00

                ORG     0000H
                SJMP    MAIN
                ORG     000BH
                LJMP    COMM_INT
                ORG     0040H
MAIN:           MOV     IE,#00H
                MOV     SP,#62H
                MOV     P1,#0FFH
                MOV     P3,#0FFH

                MOV     R1,#30H         ;Clr   CPU   RAM
                MOV     R2,#30H
       LOOP:    MOV     @R1,#00H
                INC     R1
                DJNZ    R2,LOOP

                MOV     BUAD_RAM_H,#BUAD_H
                MOV     BUAD_RAM_L,#BUAD_L
                MOV     TMOD,#01H
                MOV     TH0,BUAD_RAM_H
                MOV     TL0,BUAD_RAM_L
                SETB    TR0
                SETB    ET0
                SETB    PT0
                SETB    EA
                SETB    SEND_ENDS
                SETB    READ_ENDS
                LCALL   SEND_TEST_CODE
                LCALL   TEST1


LOOP0:          MOV     R1,#40H
                MOV     R2,#00H
                MOV     READ_FLAG,#00H
                SETB    SEND_READ
LOOP1:          ;SETB    READ_ENDS
                JB      READ_ENDS,$
                SETB    READ_ENDS
                MOV     A,READ_CODE
                MOV     @R1,A
                INC     R1
                INC     R2
                CJNE    A,#3FH,NEXT1
                SJMP    NEXT2
NEXT1:         CJNE    R2,#20H,LOOP1

NEXT2:         MOV     R1,#40H
LOOP2:         MOV     SEND_FLAG,#00H
                MOV     SEND_CODE,@R1
                CLR     SEND_READ
                JB      SEND_ENDS,$
                SETB    SEND_ENDS
                JB      READ_INT,LOOP3
                INC     R1
                DJNZ    R2,LOOP2
                SJMP    LOOP0
LOOP3:         CLR     READ_INT
                MOV     R1,#40H
                MOV     R2,#00H
                SJMP    LOOP1


                ;LCALL   SEND_TEST_CODE
                MOV     SEND_CODE,READ_CODE
                CLR     SEND_READ
                MOV     SEND_FLAG,#00H
                SETB    SEND_ENDS
                JB      SEND_ENDS,$
                SJMP    $
                SJMP    $
;**********************************************
TEST1:          MOV     READ_FLAG,#00H
                SETB    SEND_ENDS
MM1:            MOV     SEND_CODE,#3DH
                MOV     SEND_FLAG,#00H
MM3:            ;CLR     SEND_READ
                JB      SEND_ENDS,$
                SETB    SEND_ENDS

                JNB     READ_INT,MM1
                CLR     READ_INT

                SETB    READ_ENDS

                JB      READ_ENDS,$

                MOV     R7,#00H
                DJNZ    R7,$
                MOV     SEND_CODE,READ_CODE
                MOV     SEND_FLAG,#00H
                SJMP    MM3
                RET

;******************************
SEND_TEST_CODE: MOV     R6,#61H
                MOV     R7,#1AH
     SEND_LOOP: MOV     SEND_CODE,R6
                CLR     SEND_READ
                MOV     SEND_FLAG,#00H
                SETB    SEND_ENDS
                INC     R6
                JB      SEND_ENDS,$
                DJNZ    R7,SEND_LOOP
                RET

;*********************************************************************
;* SEND_READ    EQU     01H    Bit for write(0) or read(1)           *
;* SEND_ENDS    EQU     02H    Bit for communiciating(1) or ends(0)  *
;* READ_ENDS    EQU     03H    Bit for reading(1) or ends(0)         *
;* SEND_TIME    EQU     30H    Send  int  times count                *
;* READ_TIME    EQU     30H    Read  int  times count                *
;* READ_BUFF    EQU     31H    Read  bit  RRC                        *
;* SEND_COED    EQU     32H    Byte  that  may be send               *
;* READ_CODE    EQU     32H    Read  ends value byte                 *
;* SEND_COUNT   EQU     33H    Send  bit  count                      *
;* READ_COUNT   EQU     33H    Read  bit  count                      *
;* BUAD_RAM_H   EQU     34H    Communite buad TH                     *
;* BUAD_RAM_L   EQU     35H    Communite buad TL                     *
;* SEND_FLAG    EQU     36H    Send  byte flag (0-->start send)      *
;* READ_FLAG    EQU     37H    Read  byte flag (0-->check start bit) *
;* TXD_LINE     EQU     P1.4   Data TXD  line                        *
;* RXD_LINE     EQU     P1.3   Data RXD  line                        *
;* When send: SETB SEND_ENDS   //  CLR  SEND_READ                    *
;*            MOV  SEND_CODE,(Byte that will be send)                *
;*            MOV  SEND_FLAG,#00H                                    *
;*      if COMM_ENDS is 0 that completed send communiciation.        *
;*      if COMM_FLAG isn't 03H the send communiciating has been      *
;*         interrupted by read communiciation.                       *
;* When read: SETB  READ_ENDS   //    SETB  SEND_READ                *
;*            MOV  READ_FLAG,#00H                                    *
;*      if READ_ENDS is 0 that completed read communiciation         *
;*         and the value is READ_CODE.                               *
;*********************************************************************
COMM_INT:       PUSH    ACC
                PUSH    PSW
                MOV     A,TL0                   ;================
                ADD     A,BUAD_RAM_L
                MOV     TL0,A                   ;================
                MOV     TH0,BUAD_RAM_H          ;================
                JB      SEND_READ,READ_DATA     ;0 Send  or  1 Read

                JB      RXD_LINE,COMM_NEXT0     ;Read first
                CLR     SEND_ENDS               ;Close send
                SETB    TXD_LINE
                SETB    READ_INT

                MOV     READ_FLAG,#01H          ;Start read
                SETB    SEND_READ
                POP     PSW
                POP     ACC
                RETI
          ;********  Send communicating   **********
  COMM_NEXT0:   DJNZ    SEND_TIME,COMM_EXIT
                MOV     SEND_TIME,#03H
                MOV     A,SEND_FLAG             ;Process send flag
                CJNE    A,#01H,COMM_NEXT1       ;Loop  send
                MOV     A,SEND_CODE
                RRC     A
                MOV     TXD_LINE,C
                MOV     SEND_CODE,A
                DJNZ    SEND_COUNT,COMM_EXIT    ;Loop  end
                INC     SEND_FLAG
                POP     PSW
                POP     ACC
                RETI
  COMM_NEXT1:   CJNE    A,#00H,COMM_NEXT2       ;Send  start bit
                CLR     TXD_LINE                 ;1 start_bit low
                INC     SEND_FLAG
                MOV     SEND_COUNT,#08H
                MOV     SEND_TIME,#03H
                SJMP    COMM_EXIT
  COMM_NEXT2:   CJNE    A,#02H,COMM_EXIT        ;Send stop bit
                SETB    TXD_LINE
                INC     SEND_FLAG
                CLR     SEND_ENDS               ;completed communicate
                SETB    SEND_READ               ;Setup read status
COMM_EXIT:      POP     PSW
                POP     ACC
                RETI
         ;*********  Read communicating  **********
READ_DATA:      MOV     A,READ_FLAG
                CJNE    A,#02H,READ_NEXT1       ;Read a byte
                DJNZ    READ_TIME,READ_EXIT
                MOV     READ_TIME,#03H
                MOV     A,READ_BUFF
                MOV     C,RXD_LINE
                RRC     A
                MOV     READ_BUFF,A
                DJNZ    READ_COUNT,READ_EXIT    ;Completed read
                MOV     READ_CODE,A             ;Write read data byte
                INC     READ_FLAG               ;Setup  for  next  byte
                MOV     READ_TIME,#02H
                POP     PSW
                POP     ACC
                RETI
READ_NEXT1:    CJNE    A,#00H,READ_NEXT2
                JB      RXD_LINE,READ_EXIT      ;Check  RXD(RXD_LINE) first
                CLR     SEND_ENDS
                INC     READ_FLAG
                POP     PSW
                POP     ACC
                RETI
  READ_NEXT2:   CJNE    A,#01H,READ_NEXT3
                JB      RXD_LINE,CHECK_ERROR    ;Check start bit  twice
                INC     READ_FLAG               ;Setup  for  read  data
                MOV     READ_COUNT,#08H
                ;MOV     A,TL0                   ;=============
                ;ADD     A,#05H
                ;MOV     TL0,A                   ;=============
                MOV     READ_TIME,#03H    ;
                POP     PSW
                POP     ACC
                 RETI
  CHECK_ERROR:  MOV     READ_FLAG,#00H          ;fail  quit
                POP     PSW
                POP     ACC
                RETI
READ_NEXT3:    DJNZ    READ_TIME,READ_EXIT      ;Wait stop bit
                MOV     READ_TIME,#03H
                MOV     READ_FLAG,#00H
                CLR     READ_ENDS
                ;CLR     SEND_READ
READ_EXIT:      POP     PSW
                POP     ACC
                RETI
        END

 

  • 上一篇: [組圖]LAB TOOL--48型高檔萬用編程器
  • 下一篇: 串口通信的單片機程序
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機電之家 | 會員助手 | 免費鏈接

    點擊這里給我發(fā)消息66821730(技術(shù)支持)點擊這里給我發(fā)消息66821730(廣告投放) 點擊這里給我發(fā)消息41031197(編輯) 點擊這里給我發(fā)消息58733127(審核)
    本站提供的機電設(shè)備,機電供求等信息由機電企業(yè)自行提供,該企業(yè)負責信息內(nèi)容的真實性、準確性和合法性。
    機電之家對此不承擔任何保證責任,有侵犯您利益的地方請聯(lián)系機電之家,機電之家將及時作出處理。
    Copyright 2007 機電之家 Inc All Rights Reserved.機電之家-由機電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機電一體化學會
    中國行業(yè)電子商務(wù)100強網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1
    主站蜘蛛池模板: 电白县| 镇沅| 丹寨县| 洛川县| 奉贤区| 漯河市| 兴宁市| 喀喇沁旗| 桃江县| 精河县| 保康县| 延吉市| 桃园市| 桐庐县| 吉水县| 白玉县| 泽普县| 蒙阴县| 广水市| 靖西县| 东源县| 宁国市| 南安市| 屏东县| 上林县| 稷山县| 达孜县| 南平市| 达日县| 临朐县| 延安市| 澳门| 灵川县| 大兴区| 张北县| 济宁市| 宣恩县| 成安县| 拉萨市| 佳木斯市| 通榆县|