📄 new_disp.lis
字号:
.module new_disp.c
.area lit(rom, con, rel)
0000 _S::
0000 AF06 .byte 175,6
0002 6D4F .byte 'm,'O
0004 C6CB .byte 198,203
0006 EB0E .byte 235,14
0008 EFCF .byte 239,207
000A 00 .byte 0
000B .dbfile D:\avr\avr_program\disp_88i\new_disp.c
000B .dbsym e S _S A[11:11]kc
.area text(rom, con, rel)
0000 .dbfile D:\avr\avr_program\disp_88i\new_disp.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 25
0000 ; #include "iom88v.h"
0000 ;
0000 ; #define SS PB2
0000 ; #define MOSI PB3
0000 ; #define SCK PB5
0000 ;
0000 ; #define _asm asm
0000 ; #define WDR() asm("wdr")
0000 ; #define SEI() asm("sei")
0000 ; #define CLI() asm("cli")
0000 ;
0000 ; #define a1 0x04
0000 ; #define a2 0x0c
0000 ; #define a3 0x14
0000 ; #define a4 0x1c
0000 ; #define a5 0x24
0000 ; #define a6 0x2c
0000 ; #define a7 0x34
0000 ; #define a8 0x3c
0000 ; #define a9 0x44
0000 ;
0000 ; const char S[11]={0xaf,0x06,0x6d,0x4f,0xc6,0xcb,0xeb,0x0e,0xef,0xcf,0x00};
0000 ;
0000 ; void port_init(void)//口方向设置
0000 ; {
0000 .dbline 26
0000 ; DDRB = 0xff;
0000 8FEF ldi R24,255
0002 84B9 out 0x4,R24
0004 .dbline 27
0004 ; DDRC = 0X00;
0004 2224 clr R2
0006 27B8 out 0x7,R2
0008 .dbline 28
0008 ; PORTC=0xff;
0008 88B9 out 0x8,R24
000A .dbline 29
000A ; DDRD = 0x00;
000A 2AB8 out 0xa,R2
000C .dbline 30
000C ; PORTD=0xff;
000C 8BB9 out 0xb,R24
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e delay_us _delay_us fV
0010 ; time -> R16,R17
.even
0010 _delay_us::
0010 .dbline -1
0010 .dbline 33
0010 ; }
0010 ; void delay_us(int time)//微秒级延时程序
0010 ; {
0010 L3:
0010 .dbline 35
0010 ; do
0010 ; {
0010 .dbline 36
0010 ; time--;
0010 0150 subi R16,1
0012 1040 sbci R17,0
0014 .dbline 37
0014 ; }
0014 L4:
0014 .dbline 38
0014 ; while (time>1);
0014 81E0 ldi R24,1
0016 90E0 ldi R25,0
0018 8017 cp R24,R16
001A 9107 cpc R25,R17
001C CCF3 brlt L3
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbsym r time 16 I
0020 .dbend
0020 .dbfunc e delay_ms _delay_ms fV
0020 ; time -> R10,R11
.even
0020 _delay_ms::
0020 00D0 rcall push_gset3x
0022 5801 movw R10,R16
0024 .dbline -1
0024 .dbline 41
0024 ; }
0024 ; void delay_ms(unsigned int time)//毫秒级延时程序
0024 ; {
0024 06C0 rjmp L8
0026 L7:
0026 .dbline 43
0026 .dbline 44
0026 08EE ldi R16,1000
0028 13E0 ldi R17,3
002A F2DF rcall _delay_us
002C .dbline 45
002C C501 movw R24,R10
002E 0197 sbiw R24,1
0030 5C01 movw R10,R24
0032 .dbline 46
0032 L8:
0032 .dbline 42
0032 ; while(time!=0)
0032 AA20 tst R10
0034 C1F7 brne L7
0036 BB20 tst R11
0038 B1F7 brne L7
003A X0:
003A .dbline -2
003A L6:
003A 00D0 rcall pop_gset3x
003C .dbline 0 ; func end
003C 0895 ret
003E .dbsym r time 10 i
003E .dbend
003E .dbfunc e SendBit _SendBit fV
003E ; i -> R10
003E ; bitcnt -> R12
003E ; dat -> R14
.even
003E _SendBit::
003E 00D0 rcall push_gset5x
0040 C22E mov R12,R18
0042 E02E mov R14,R16
0044 .dbline -1
0044 .dbline 54
0044 ; {
0044 ; delay_us(1000);
0044 ; time--;
0044 ; }
0044 ; }/*
0044 ; void Delay()
0044 ; {
0044 ; unsigned char i;
0044 ; for(i=0;i<10;i++); /*用于调整CLK 脉冲宽度*/
0044 ; //}
0044 ; void SendBit(unsigned char dat,unsigned char bitcnt)
0044 ; {
0044 .dbline 56
0044 ; unsigned char i;
0044 ; CLI();
0044 F894 cli
0046 .dbline 57
0046 ; for(i=0;i<bitcnt;i++)
0046 AA24 clr R10
0048 0FC0 rjmp L14
004A L11:
004A .dbline 58
004A ; {
004A .dbline 59
004A ; if(( dat & 0X80 ) == 0)
004A E7FC sbrc R14,7
004C 02C0 rjmp L15
004E .dbline 60
004E ; PORTB &=(~(1<<MOSI));
004E 2B98 cbi 0x5,3
0050 01C0 rjmp L16
0052 L15:
0052 .dbline 62
0052 ; else
0052 ; PORTB |=(1<<MOSI); /*发送数据由高位到低位传送*/
0052 2B9A sbi 0x5,3
0054 L16:
0054 .dbline 64
0054 0AE0 ldi R16,10
0056 10E0 ldi R17,0
0058 DBDF rcall _delay_us
005A .dbline 65
005A 2D9A sbi 0x5,5
005C .dbline 67
005C 0AE0 ldi R16,10
005E 10E0 ldi R17,0
0060 D7DF rcall _delay_us
0062 .dbline 68
0062 2D98 cbi 0x5,5
0064 .dbline 69
0064 EE0C lsl R14
0066 .dbline 70
0066 L12:
0066 .dbline 57
0066 A394 inc R10
0068 L14:
0068 .dbline 57
0068 AC14 cp R10,R12
006A 78F3 brlo L11
006C .dbline 71
006C ; //Delay();
006C ; delay_us(10);
006C ; PORTB |=(1<<SCK); /*置时钟线为高通知被控器开始接收数位*/
006C ; //Delay();
006C ; delay_us(10);
006C ; PORTB &=(~(1<<SCK)); /*钳住总线准备下一个数据位*/
006C ; dat=dat<<1; /*发送数据左移一位*/
006C ; }
006C ; SEI();
006C 7894 sei
006E .dbline -2
006E L10:
006E 00D0 rcall pop_gset5x
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbsym r i 10 c
0072 .dbsym r bitcnt 12 c
0072 .dbsym r dat 14 c
0072 .dbend
0072 .dbfunc e Start_spi _Start_spi fV
.even
0072 _Start_spi::
0072 .dbline -1
0072 .dbline 75
0072 ; }
0072 ;
0072 ; void Start_spi()
0072 ; {
0072 .dbline 76
0072 ; PORTB |=(1<<SS);
0072 2A9A sbi 0x5,2
0074 .dbline 77
0074 ; PORTB |=(1<<SCK);
0074 2D9A sbi 0x5,5
0076 .dbline 78
0076 ; PORTB |=(1<<MOSI);
0076 2B9A sbi 0x5,3
0078 .dbline 80
0078 ; //Delay();
0078 ; delay_us(10);
0078 0AE0 ldi R16,10
007A 10E0 ldi R17,0
007C C9DF rcall _delay_us
007E .dbline 81
007E ; PORTB &=(~(1<<SS));PORTB &=(~(1<<SS));
007E 2A98 cbi 0x5,2
0080 .dbline 81
0080 2A98 cbi 0x5,2
0082 .dbline 82
0082 ; PORTB &=(~(1<<SCK));PORTB &=(~(1<<SCK));
0082 2D98 cbi 0x5,5
0084 .dbline 82
0084 2D98 cbi 0x5,5
0086 .dbline -2
0086 L17:
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbend
0088 .dbfunc e SendByte _SendByte fV
0088 ; dat -> R10
.even
0088 _SendByte::
0088 00D0 rcall push_gset3x
008A A02E mov R10,R16
008C .dbline -1
008C .dbline 86
008C ; }
008C ;
008C ; void SendByte(unsigned char dat)
008C ; {
008C .dbline 87
008C ; SendBit(dat,8); /*发送字节*/
008C 28E0 ldi R18,8
008E 0A2D mov R16,R10
0090 D6DF rcall _SendBit
0092 .dbline -2
0092 L18:
0092 00D0 rcall pop_gset3x
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbsym r dat 10 c
0096 .dbend
0096 .dbfunc e SENDCOMA _SENDCOMA fV
0096 ; com -> R10
.even
0096 _SENDCOMA::
0096 00D0 rcall push_gset3x
0098 A02E mov R10,R16
009A .dbline -1
009A .dbline 91
009A ; }
009A ;
009A ; void SENDCOMA(unsigned char com)
009A ; {
009A .dbline 92
009A ; Start_spi();
009A EBDF rcall _Start_spi
009C .dbline 93
009C ; SendBit(0X80,4); //*发送设置命令ID=100 0*
009C 24E0 ldi R18,4
009E 00E8 ldi R16,128
00A0 CEDF rcall _SendBit
00A2 .dbline 94
00A2 ; SendByte(com); //*发送命令字*
00A2 0A2D mov R16,R10
00A4 F1DF rcall _SendByte
00A6 .dbline -2
00A6 L19:
00A6 00D0 rcall pop_gset3x
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbsym r com 10 c
00AA .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -