📄 serialr.lst
字号:
MCS-51 MACRO ASSEMBLER SERIALR 12/02/99 PAGE 1
DOS 7.10 (038-N) MCS-51 MACRO ASSEMBLER, V2.3
OBJECT MODULE PLACED IN SERIALR.OBJ
ASSEMBLER INVOKED BY: C:\C51\BIN\ASM51.EXE SERIALR.ASM
LOC OBJ LINE SOURCE
1 ;* PSI Stabl Robrt */
2 ;* */
3 ;* SerialR (Funkce pro komunikaci po SCI) 23.06.1998 */
4 ;************************************************************************/
5 ; Revize 5.3.1999
6
7
8 serialR_seg SEGMENT CODE
9 serialData_seg SEGMENT DATA
10
0008 11 VelBafr equ 8
12
---- 13 RSEG serialData_seg
0000 14 RxBafr: ds VelBafr ; bafr vstupnich vzorku
0008 15 RxPoint: ds 1 ; Pozice posledniho cteneho znaku
0009 16 RxPointG: ds 1 ; Pozice znaku pro f-ci get
000A 17 RxCount: ds 1 ; Pocet znaku v bafru
000B 18 LinkFlg: ds 1 ; Fleg volne linty (1 voln
o)
19
0008 20 RxBafrMax equ RxBafr+8 ; Max hodnota bafru
0000 21 RxBafrMin equ RxBafr ; Min hodnota begru
22
23
24 ;CSEG
25 ; ORG 0023h
26 ; push psw
27 ; ljmp serial_int
28
---- 29 RSEG serialR_seg
30 PUBLIC serial_int ; interrupt handler
31 PUBLIC getkeyR ; Vycteni 1B z prijmaciho bafru
32 PUBLIC getCharR ; Vycte 1B (neni-li v bafru tak ceka)
33 PUBLIC getWordR ; Vycte 2B (neni-li...) cte Lo Hi
34 PUBLIC _putkeyR ; Poslani 1B na seriak
35 PUBLIC _putWordR ; Poslani 2B na seriak (Lo Hi)
36 PUBLIC in_Rx ; Pocet B v prijmacim bafru
37 PUBLIC init_Bafr ; Inicializace prijm. bafru
38 PUBLIC LinkFlg ; Priznak vysilaci linka volna
39 PUBLIC RxCount ; Pocet znaku v prijmacim bafru
40 PUBLIC Tim_out_Int ; Funkce pro obsluh
u time out
41 ; ********************************************************************
42 _putkeyR:
0000 E500 F 43 mov a,LinkFlg
0002 60FC 44 jz _putkeyR
0004 C000 45 push 00h ; r0
0006 EF 46 mov a,r7
0007 D299 47 setb ti
0009 F599 48 mov sbuf,a
MCS-51 MACRO ASSEMBLER SERIALR 12/02/99 PAGE 2
LOC OBJ LINE SOURCE
000B C299 49 clr ti
000D 750000 F 50 mov LinkFlg,#0
0010 D000 51 pop 00h ; r0
0012 22 52 ret
53
54 ; ********************************************************************
0013 750000 F 55 init_Bafr: mov RxPoint,#RxBafr
0016 750000 F 56 mov RxPointG,#RxBafr
0019 750000 F 57 mov RxCount,#0
001C 22 58 ret
59
60 ; ********************************************************************
61
62 serial_int:
001D 309905 63 jnb ti,testri
0020 750001 F 64 mov LinkFlg,#1
0023 C299 65 clr ti
66
0025 109801 67 testri: jbc ri,got_ri ; check for character in buffer
0028 22 68 ret ; reti
69
70 got_ri:
0029 C000 71 push 00h ; r0 to stack
002B E500 F 72 mov a,RxCount ; V bafru je volne misto
002D 04 73 inc a
002E B40804 74 cjne a,#VelBafr,dal
0031 E599 75 mov a,sbuf
0033 8010 76 sjmp keyexit ; Bafr je plny, konec
77 dal:
0035 F500 F 78 mov RxCount,a
0037 E500 F 79 mov a,RxPoint ; Rotace bafru
0039 04 80 inc a ;
003A B40002 F 81 cjne a,#RxBafrMax,keyptok
003D 7400 F 82 mov a,#RxBafrMin ; rotace bafru preteceni
83
;
003F F8 84 keyptok: mov r0,a ; load the Buffer pointer
0040 E599 85 mov a,sbuf ; get the character waiting
0042 F6 86 mov @r0,a ; save the character
0043 8800 F 87 mov RxPoint,r0 ; save Point
0045 D000 88 keyexit: pop 00h
0047 22 89 ret ; reti
90 ; ************************************************************************
91
0048 C2AC 92 getkeyR: clr ES
004A C0E0 93 push acc ;save acc
004C C000 94 push 00h ;save r0
95
004E E500 F 96 mov a,RxCount ;Test Count
0050 B40002 97 cjne a,#0,pokr
0053 0100 F 98 ajmp kbfrd_ok ;Neni co precist
99 pokr:
0055 14 100 dec a
0056 F500 F 101 mov RxCount,a ;
0058 E500 F 102 mov a,RxPointG
MCS-51 MACRO ASSEMBLER SERIALR 12/02/99 PAGE 3
LOC OBJ LINE SOURCE
005A 04 103 inc a
005B B40002 F 104 cjne a,#RxBafrMax,pokr2
005E 7400 F 105 mov a,#RxBafrMin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -