📄 74hc595.lis
字号:
.module _74HC595.c
.area text(rom, con, rel)
0000 .dbfile ..\source\bms\74HC595.c
0000 .dbfile C:\DOCUME~1\Administrator\桌面\MEGA16\source\bms\74HC595.c
0000 .dbfunc e OR595send_byte _OR595send_byte fV
0000 ; i -> R20
0000 ; byte -> R10
.even
0000 _OR595send_byte::
0000 AA92 st -y,R10
0002 4A93 st -y,R20
0004 A02E mov R10,R16
0006 .dbline -1
0006 .dbline 5
0006 ; #define _74HC595_GLOBALS
0006 ; #include "..\source\CPU_Source\includes.h"
0006 ;
0006 ; void OR595send_byte(INT8U byte)
0006 ; {
0006 .dbline 7
0006 ; INT8U i;
0006 ; for(i=0;i<8;i++)
0006 4427 clr R20
0008 0EC0 xjmp L5
000A L2:
000A .dbline 8
000A ; {
000A .dbline 9
000A ; if(byte & (1<<(7-i)))
000A 17E0 ldi R17,7
000C 141B sub R17,R20
000E 01E0 ldi R16,1
0010 0E940000 xcall lsl8
0014 2A2C mov R2,R10
0016 2022 and R2,R16
0018 11F0 breq L6
001A X0:
001A .dbline 10
001A ; OR595_dataON;
001A DC9A sbi 0x1b,4
001C 01C0 xjmp L7
001E L6:
001E .dbline 12
001E ; else
001E ; OR595_dataOFF;
001E DC98 cbi 0x1b,4
0020 L7:
0020 .dbline 13
0020 ; OR595_clkON;
0020 DE9A sbi 0x1b,6
0022 .dbline 14
0022 ; OR595_clkOFF;
0022 DE98 cbi 0x1b,6
0024 .dbline 15
0024 ; }
0024 L3:
0024 .dbline 7
0024 4395 inc R20
0026 L5:
0026 .dbline 7
0026 4830 cpi R20,8
0028 80F3 brlo L2
002A X1:
002A .dbline -2
002A L1:
002A .dbline 0 ; func end
002A 4991 ld R20,y+
002C A990 ld R10,y+
002E 0895 ret
0030 .dbsym r i 20 c
0030 .dbsym r byte 10 c
0030 .dbend
0030 .dbfunc e OR595send_int _OR595send_int fV
0030 ; byte_L -> R10
0030 ; byte_H -> R12
0030 ; data -> R10,R11
.even
0030 _OR595send_int::
0030 0E940000 xcall push_xgset003C
0034 5801 movw R10,R16
0036 .dbline -1
0036 .dbline 19
0036 ; }
0036 ;
0036 ; void OR595send_int(INT16U data)
0036 ; {
0036 .dbline 21
0036 ; INT8U byte_H,byte_L;
0036 ; byte_H=data>>8;
0036 6501 movw R12,R10
0038 CD2C mov R12,R13
003A DD24 clr R13
003C .dbline 22
003C ; byte_L=data;
003C .dbline 23
003C ; OR595send_byte(byte_H);
003C 0C2D mov R16,R12
003E E0DF xcall _OR595send_byte
0040 .dbline 24
0040 ; OR595send_byte(byte_L);
0040 0A2D mov R16,R10
0042 DEDF xcall _OR595send_byte
0044 .dbline 25
0044 ; OR595_latchON;
0044 DD9A sbi 0x1b,5
0046 .dbline 26
0046 ; OR595_latchOFF;
0046 DD98 cbi 0x1b,5
0048 .dbline -2
0048 L8:
0048 .dbline 0 ; func end
0048 0C940000 xjmp pop_xgset003C
004C .dbsym r byte_L 10 c
004C .dbsym r byte_H 12 c
004C .dbsym r data 10 i
004C .dbend
004C .dbfunc e OR595Bsend_byte _OR595Bsend_byte fV
004C ; i -> R20
004C ; byte -> R10
.even
004C _OR595Bsend_byte::
004C AA92 st -y,R10
004E 4A93 st -y,R20
0050 A02E mov R10,R16
0052 .dbline -1
0052 .dbline 30
0052 ; }
0052 ;
0052 ; void OR595Bsend_byte(unsigned char byte) //595保存一个字节到输出口
0052 ; {
0052 .dbline 32
0052 ; unsigned char i;
0052 ; for(i=0;i<8;i++)
0052 4427 clr R20
0054 0EC0 xjmp L13
0056 L10:
0056 .dbline 33
0056 ; {
0056 .dbline 34
0056 ; if(byte & (1<<(7-i)))
0056 17E0 ldi R17,7
0058 141B sub R17,R20
005A 01E0 ldi R16,1
005C 0E940000 xcall lsl8
0060 2A2C mov R2,R10
0062 2022 and R2,R16
0064 11F0 breq L14
0066 X2:
0066 .dbline 35
0066 ; OR595B_dataON;
0066 C29A sbi 0x18,2
0068 01C0 xjmp L15
006A L14:
006A .dbline 37
006A ; else
006A ; OR595B_dataOFF;
006A C298 cbi 0x18,2
006C L15:
006C .dbline 38
006C ; OR595B_clkON;
006C C39A sbi 0x18,3
006E .dbline 40
006E ;
006E ; OR595B_clkOFF;
006E C398 cbi 0x18,3
0070 .dbline 41
0070 ; }
0070 L11:
0070 .dbline 32
0070 4395 inc R20
0072 L13:
0072 .dbline 32
0072 4830 cpi R20,8
0074 80F3 brlo L10
0076 X3:
0076 .dbline -2
0076 L9:
0076 .dbline 0 ; func end
0076 4991 ld R20,y+
0078 A990 ld R10,y+
007A 0895 ret
007C .dbsym r i 20 c
007C .dbsym r byte 10 c
007C .dbend
007C .dbfunc e OR595Bsend_int _OR595Bsend_int fV
007C ; byte_L -> R10
007C ; byte_H -> R12
007C ; data -> R10,R11
.even
007C _OR595Bsend_int::
007C 0E940000 xcall push_xgset003C
0080 5801 movw R10,R16
0082 .dbline -1
0082 .dbline 45
0082 ; }
0082 ;
0082 ; void OR595Bsend_int(unsigned int data) //595发送16位数
0082 ; {
0082 .dbline 47
0082 ; unsigned char byte_H,byte_L;
0082 ; byte_H=data>>8;
0082 6501 movw R12,R10
0084 CD2C mov R12,R13
0086 DD24 clr R13
0088 .dbline 48
0088 ; byte_L=data;
0088 .dbline 49
0088 ; OR595Bsend_byte(byte_H);
0088 0C2D mov R16,R12
008A E0DF xcall _OR595Bsend_byte
008C .dbline 50
008C ; OR595Bsend_byte(byte_L);
008C 0A2D mov R16,R10
008E DEDF xcall _OR595Bsend_byte
0090 .dbline 51
0090 ; OR595B_latchON;
0090 C49A sbi 0x18,4
0092 .dbline 52
0092 ; OR595B_latchOFF;
0092 C498 cbi 0x18,4
0094 .dbline -2
0094 L16:
0094 .dbline 0 ; func end
0094 0C940000 xjmp pop_xgset003C
0098 .dbsym r byte_L 10 c
0098 .dbsym r byte_H 12 c
0098 .dbsym r data 10 i
0098 .dbend
0098 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -