📄 hc595.lst
字号:
__start:
__text_start:
0066 EFCF LDI R28,0xFF
0067 E1D0 LDI R29,0x10
0068 BFCD OUT 0x3D,R28
0069 BFDE OUT 0x3E,R29
006A 51C0 SUBI R28,0x10
006B 40D0 SBCI R29,0
006C EA0A LDI R16,0xAA
006D 8308 STD Y+0,R16
006E 2400 CLR R0
006F E0E4 LDI R30,4
0070 E0F1 LDI R31,1
0071 E011 LDI R17,1
0072 30E8 CPI R30,0x8
0073 07F1 CPC R31,R17
0074 F011 BEQ 0x0077
0075 9201 ST R0,Z+
0076 CFFB RJMP 0x0072
0077 8300 STD Z+0,R16
0078 ECE7 LDI R30,0xC7
0079 E0F0 LDI R31,0
007A E0A0 LDI R26,0
007B E0B1 LDI R27,1
007C E010 LDI R17,0
007D 3CEB CPI R30,0xCB
007E 07F1 CPC R31,R17
007F F021 BEQ 0x0084
0080 95C8 LPM
0081 9631 ADIW R30,1
0082 920D ST R0,X+
0083 CFF9 RJMP 0x007D
0084 940E00D2 CALL _main
_exit:
0086 CFFF RJMP _exit
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\Seg7\source\main.c
(0001) /************************************************
(0002) 文件:main.c
(0003) 用途:
(0004) 注意:内部8M晶振
(0005) 创建:2008.4.1
(0006) 修改:2008.4.1
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009)
(0010) #include "config.h"
(0011) volatile unsigned int countnum=0;
(0012)
(0013) void timer1_init(void)
(0014) {
(0015) TCCR1B = 0x00; //stop
_timer1_init:
0087 2422 CLR R2
0088 BC2E OUT 0x2E,R2
(0016) TCNT1H = 0x8F; //setup
0089 E88F LDI R24,0x8F
008A BD8D OUT 0x2D,R24
(0017) TCNT1L = 0x81;
008B E881 LDI R24,0x81
008C BD8C OUT 0x2C,R24
(0018) OCR1AH = 0x70;
008D E780 LDI R24,0x70
008E BD8B OUT 0x2B,R24
(0019) OCR1AL = 0x7F;
008F E78F LDI R24,0x7F
0090 BD8A OUT 0x2A,R24
(0020) OCR1BH = 0x70;
0091 E780 LDI R24,0x70
0092 BD89 OUT 0x29,R24
(0021) OCR1BL = 0x7F;
0093 E78F LDI R24,0x7F
0094 BD88 OUT 0x28,R24
(0022) OCR1CH = 0x70;
0095 E780 LDI R24,0x70
0096 93800079 STS 0x79,R24
(0023) OCR1CL = 0x7F;
0098 E78F LDI R24,0x7F
0099 93800078 STS 0x78,R24
(0024) ICR1H = 0x70;
009B E780 LDI R24,0x70
009C BD87 OUT 0x27,R24
(0025) ICR1L = 0x7F;
009D E78F LDI R24,0x7F
009E BD86 OUT 0x26,R24
(0026) TCCR1A = 0x00;
009F BC2F OUT 0x2F,R2
(0027) TCCR1B = 0x04; //start Timer
00A0 E084 LDI R24,4
00A1 BD8E OUT 0x2E,R24
00A2 9508 RET
_timer1_ovf_isr:
00A3 922A ST R2,-Y
00A4 923A ST R3,-Y
00A5 938A ST R24,-Y
00A6 939A ST R25,-Y
00A7 B62F IN R2,0x3F
00A8 922A ST R2,-Y
(0028) }
(0029)
(0030) #pragma interrupt_handler timer1_ovf_isr:15
(0031) void timer1_ovf_isr(void)
(0032) {
(0033) TCNT1H = 0x8F; //reload counter high value
00A9 E88F LDI R24,0x8F
00AA BD8D OUT 0x2D,R24
(0034) TCNT1L = 0x81; //reload counter low value
00AB E881 LDI R24,0x81
00AC BD8C OUT 0x2C,R24
(0035) countnum++;
00AD 91800100 LDS R24,countnum
00AF 91900101 LDS R25,countnum+1
00B1 9601 ADIW R24,1
00B2 93900101 STS countnum+1,R25
00B4 93800100 STS countnum,R24
(0036) if(countnum>9999) countnum=0;
00B6 E08F LDI R24,0xF
00B7 E297 LDI R25,0x27
00B8 90200100 LDS R2,countnum
00BA 90300101 LDS R3,countnum+1
00BC 1582 CP R24,R2
00BD 0593 CPC R25,R3
00BE F430 BCC 0x00C5
00BF 2422 CLR R2
00C0 2433 CLR R3
00C1 92300101 STS countnum+1,R3
00C3 92200100 STS countnum,R2
00C5 9029 LD R2,Y+
00C6 BE2F OUT 0x3F,R2
00C7 9199 LD R25,Y+
00C8 9189 LD R24,Y+
00C9 9039 LD R3,Y+
00CA 9029 LD R2,Y+
00CB 9518 RETI
(0037) }
(0038)
(0039) void init_devices(void)
(0040) {
(0041) CLI(); //disable all interrupts
_init_devices:
00CC 94F8 BCLR 7
(0042) timer1_init();
00CD DFB9 RCALL _timer1_init
(0043) TIMSK = 0x04; //timer interrupt sources
00CE E084 LDI R24,4
00CF BF87 OUT 0x37,R24
(0044) SEI(); //re-enable interrupts
00D0 9478 BSET 7
00D1 9508 RET
(0045) }
(0046)
(0047) void main(void)
(0048) {
(0049) init_devices();
_main:
00D2 DFF9 RCALL _init_devices
(0050) HC_595_init();
00D3 940E0112 CALL _HC_595_init
00D5 C006 RJMP 0x00DC
(0051) while(1)
(0052) {
(0053) Seg7_Led_display(countnum);
00D6 91000100 LDS R16,countnum
00D8 91100101 LDS R17,countnum+1
00DA 940E01AA CALL _Seg7_Led_display
00DC CFF9 RJMP 0x00D6
00DD 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\Seg7\source\lib\delay.c
(0001) /************************************************
(0002) 文件:delay.c
(0003) 用途:延时函数
(0004) 注意:系统时钟8M
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009)
(0010) void delay_1us(void) //1us延时函数
(0011) {
(0012) asm("nop");
_delay_1us:
00DE 0000 NOP
00DF 9508 RET
_delay_nus:
i --> R20
n --> R22
00E0 940E0434 CALL push_gset2
00E2 01B8 MOVW R22,R16
(0013) }
(0014)
(0015) void delay_nus(unsigned int n) //N us延时函数
(0016) {
(0017) unsigned int i=0;
00E3 2744 CLR R20
00E4 2755 CLR R21
(0018) for (i=0;i<n;i++)
00E5 C003 RJMP 0x00E9
(0019) delay_1us();
00E6 DFF7 RCALL _delay_1us
00E7 5F4F SUBI R20,0xFF
00E8 4F5F SBCI R21,0xFF
00E9 1746 CP R20,R22
00EA 0757 CPC R21,R23
00EB F3D0 BCS 0x00E6
00EC 940E042B CALL pop_gset2
00EE 9508 RET
(0020) }
(0021)
(0022) void delay_1ms(void) //1ms延时函数
(0023) {
(0024) unsigned int i;
(0025) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
00EF 2700 CLR R16
00F0 2711 CLR R17
00F1 C002 RJMP 0x00F4
00F2 5F0F SUBI R16,0xFF
00F3 4F1F SBCI R17,0xFF
00F4 3704 CPI R16,0x74
00F5 E0E4 LDI R30,4
00F6 071E CPC R17,R30
00F7 F3D0 BCS 0x00F2
00F8 9508 RET
_delay_nms:
i --> R20
n --> R22
00F9 940E0434 CALL push_gset2
00FB 01B8 MOVW R22,R16
(0026) }
(0027)
(0028) void delay_nms(unsigned int n) //N ms延时函数
(0029) {
(0030) unsigned int i=0;
00FC 2744 CLR R20
00FD 2755 CLR R21
(0031) for (i=0;i<n;i++)
00FE C003 RJMP 0x0102
(0032) delay_1ms();
00FF DFEF RCALL _delay_1ms
0100 5F4F SUBI R20,0xFF
0101 4F5F SBCI R21,0xFF
0102 1746 CP R20,R22
0103 0757 CPC R21,R23
0104 F3D0 BCS 0x00FF
0105 940E042B CALL pop_gset2
0107 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\Seg7\source\lib\spi.c
(0001) /************************************************
(0002) 文件:spi.c
(0003) 用途:SPI驱动
(0004) 注意:
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009) #include "..\config.h"
(0010) /*************************************************************************
(0011) ** 函数名称: spi_init(void)
(0012) ** 功能描述: SPI初始化
(0013) ** 输 入:
(0014) ** 输出 :
(0015) ** 全局变量: 无
(0016) ** 调用模块:
(0017) ** 说明:
(0018) ** 注意:
(0019) **************************************************************************/
(0020) void spi_init(void)
(0021) {
(0022) DDRB |= (1<<MOSI)|(1<<SCK)|(1<<SS);//设置MOSI,SCK输出
_spi_init:
0108 B387 IN R24,0x17
0109 6087 ORI R24,7
010A BB87 OUT 0x17,R24
(0023) SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);//使能SPI,主机模式
010B E583 LDI R24,0x53
010C B98D OUT 0x0D,R24
010D 9508 RET
(0024) }
(0025) /*************************************************************************
(0026) ** 函数名称: SPI_MasterTransmit(char Data)
(0027) ** 功能描述: SPI主机发送数据
(0028) ** 输 入: Data 需要通过SPI传输的数据
(0029) ** 输出 :
(0030) ** 全局变量: 无
(0031) ** 调用模块:
(0032) ** 说明:
(0033) ** 注意:
(0034) **************************************************************************/
(0035) void SPI_MasterTransmit(char Data)
(0036) {
(0037) /* 启动数据传输 */
(0038) SPDR = Data;
_SPI_MasterTransmit:
Data --> R16
010E B90F OUT 0x0F,R16
(0039) /* 等待传输结束 */
(0040) while(!(SPSR & (1<<SPIF)))
010F 9B77 SBIS 0x0E,7
0110 CFFE RJMP 0x010F
0111 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\Seg7\source\lib\hc595.c
(0001) /************************************************
(0002) 文件:hc595.c
(0003) 用途:
(0004) 注意:内部8M晶振
(0005) 创建:2008.4.1
(0006) 修改:2008.4.1
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009) #include "..\config.h"
(0010) const unsigned char Seg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66, //0,1,2,3,4
(0011) 0x6D,0x7D,0x07,0x7F,0x6F, //5,6,7,8,9
(0012) 0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; //a,b,c,d,e,f
(0013) volatile unsigned char Seg7_Led_Buf[4],point=0,point_pos=0;//point是小数点标志1代表有小数点point_pos表示小数点位置
(0014) /*************************************************************************
(0015) ** 函数名称:HC595初始化
(0016) ** 功能描述:
(0017) ** 输 入:
(0018) ** 输出 :
(0019) ** 全局变量:
(0020) ** 调用模块:
(0021) ** 说明:
(0022) ** 注意:
(0023) **************************************************************************/
(0024) void HC_595_init(void)
(0025) {
(0026) OE_DDR |= (1<<OE);
_HC_595_init:
0112 9AA7 SBI 0x14,7
(0027) OE_PORT &= (1<<OE);
0113 B385 IN R24,0x15
0114 7880 ANDI R24,0x80
0115 BB85 OUT 0x15,R24
(0028) PORTB = 0x0F;
0116 E08F LDI R24,0xF
0117 BB88 OUT 0x18,R24
(0029) spi_init();
0118 940E0108 CALL _spi_init
(0030) Seg7_Led_Buf[0]=16;
011A E180 LDI R24,0x10
011B 93800104 STS Seg7_Led_Buf,R24
(0031) Seg7_Led_Buf[1]=16;
011D 93800105 STS Seg7_Led_Buf+1,R24
(0032) Seg7_Led_Buf[2]=16;
011F 93800106 STS Seg7_Led_Buf+2,R24
(0033) Seg7_Led_Buf[3]=16;
0121 93800107 STS Seg7_Led_Buf+3,R24
0123 9508 RET
_HC_595_OUT:
data --> R20
0124 940E0436 CALL push_gset1
0126 2F40 MOV R20,R16
(0034) }
(0035) /*************************************************************************
(0036) ** 函数名称:HC595送数据
(0037) ** 功能描述:
(0038) ** 输 入:
(0039) ** 输出 :
(0040) ** 全局变量:
(0041) ** 调用模块:
(0042) ** 说明:
(0043) ** 注意:
(0044) **************************************************************************/
(0045) void HC_595_OUT(unsigned char data)
(0046) {
(0047) SS_L();
0127 98C0 CBI 0x18,0
(0048) SPI_MasterTransmit(data);
0128 2F04 MOV R16,R20
0129 940E010E CALL _SPI_MasterTransmit
(0049) SS_H();
012B 9AC0 SBI 0x18,0
012C 940E0439 CALL pop_gset1
012E 9508 RET
(0050) }
(0051) /*************************************************************************
(0052) ** 函数名称:HC595刷新显示
(0053) ** 功能描述:
(0054) ** 输 入:
(0055) ** 输出 :
(0056) ** 全局变量:
(0057) ** 调用模块:
(0058) ** 说明:
(0059) ** 注意:
(0060) **************************************************************************/
(0061) void Seg7_Led_Update(void)
(0062) {
(0063) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[0]]);
_Seg7_Led_Update:
012F E88C LDI R24,0x8C
0130 E090 LDI R25,0
0131 91E00104 LDS R30,Seg7_Led_Buf
0133 27FF CLR R31
0134 0FE8 ADD R30,R24
0135 1FF9 ADC R31,R25
0136 9104 LPM R16,0(Z)
0137 DFEC RCALL _HC_595_OUT
(0064) Seg7_Bit0_En();
0138 9ABC SBI 0x17,4
0139 9AC4 SBI 0x18,4
(0065) delay_nus(60);
013A E30C LDI R16,0x3C
013B E010 LDI R17,0
013C 940E00E0 CALL _delay_nus
(0066) Seg7_Bit0_Dis();
013E 9ABC SBI 0x17,4
013F 98C4 CBI 0x18,4
(0067)
(0068) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[1]]);
0140 E88C LDI R24,0x8C
0141 E090 LDI R25,0
0142 91E00105 LDS R30,Seg7_Led_Buf+1
0144 27FF CLR R31
0145 0FE8 ADD R30,R24
0146 1FF9 ADC R31,R25
0147 9104 LPM R16,0(Z)
0148 DFDB RCALL _HC_595_OUT
(0069) if((point==1)&&(point_pos==1))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -