📄 zz.lst
字号:
Interrupt Vectors
00000 940C 004B JMP __text_start|__start
Program Code (text area)
__text_start|__start:
0004B E5CF LDI R28,0x5F
0004C E0D4 LDI R29,4
0004D BFCD OUT 0x3D,R28
0004E BFDE OUT 0x3E,R29
0004F 51C0 SUBI R28,0x10
00050 40D0 SBCI R29,0
00051 EA0A LDI R16,0xAA
00052 8308 ST Y,R16
00053 2400 CLR R0
00054 E9EE LDI R30,0x9E
00055 E0F0 LDI R31,0
00056 E010 LDI R17,0
00057 39EE CPI R30,0x9E
00058 07F1 CPC R31,R17
00059 F011 BEQ 0x005C
0005A 9201 ST Z+,R0
0005B CFFB RJMP 0x0057
0005C 8300 ST Z,R16
0005D E5E8 LDI R30,0x58
0005E E0F0 LDI R31,0
0005F E6A0 LDI R26,0x60
00060 E0B0 LDI R27,0
00061 E010 LDI R17,0
00062 E000 LDI R16,0
00063 BF0B OUT 0x3B,R16
00064 39E6 CPI R30,0x96
00065 07F1 CPC R31,R17
00066 F021 BEQ 0x006B
00067 95C8 LPM
00068 9631 ADIW R30,1
00069 920D ST X+,R0
0006A CFF9 RJMP 0x0064
0006B 940E 015A CALL _main
_exit:
0006D CFFF RJMP _exit
FILE: F:\新学习板程序\avr程序\181286~1\12864_~1\12864.h
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005)
(0006) #define clk 7
(0007) #define set_clk PORTC |= BIT(clk)
(0008) #define clr_clk PORTC &= ~BIT(clk)
(0009)
(0010) #define sid 6
(0011) #define clr_sid PORTC &= ~BIT(sid)
(0012) #define set_sid PORTC |= BIT(sid)
(0013)
(0014) void delay()
(0015) {
(0016) NOP();
_delay:
0006E 0000 NOP
(0017) NOP();
0006F 0000 NOP
00070 9508 RET
(0018) }
(0019) void delay_us(uint i)
(0020) {
(0021) while(i--)
_delay_us:
i --> R16
00071 0118 MOVW R2,R16
00072 5001 SUBI R16,1
00073 4010 SBCI R17,0
00074 2022 TST R2
00075 F7D9 BNE 0x0071
00076 2033 TST R3
00077 F7C9 BNE 0x0071
00078 9508 RET
_delay_ms:
a --> R20
i --> R16
00079 934A ST -Y,R20
0007A 935A ST -Y,R21
(0022) {;}
(0023) }
(0024) void delay_ms(uint i)
(0025) {
(0026) uint a;
(0027) for(;i;i--)
0007B C00B RJMP 0x0087
(0028) {
(0029) for(a=0;a<672;a++);
0007C 2744 CLR R20
0007D 2755 CLR R21
0007E C002 RJMP 0x0081
0007F 5F4F SUBI R20,0xFF
00080 4F5F SBCI R21,0xFF
00081 3A40 CPI R20,0xA0
00082 E0E2 LDI R30,2
00083 075E CPC R21,R30
00084 F3D0 BCS 0x007F
00085 5001 SUBI R16,1
00086 4010 SBCI R17,0
00087 3000 CPI R16,0
00088 0701 CPC R16,R17
00089 F791 BNE 0x007C
0008A 9159 LD R21,Y+
0008B 9149 LD R20,Y+
0008C 9508 RET
_wr_bit:
data --> R10
n --> R12
0008D 92AA ST -Y,R10
0008E 92CA ST -Y,R12
0008F 2EA2 MOV R10,R18
00090 2EC0 MOV R12,R16
(0030) }
(0031) }
(0032) void wr_bit(uchar n,uchar data)
(0033) {
(0034) for(;n;n--) //写入位数
00091 C00B RJMP 0x009D
(0035) {
(0036) if(data&0x80)
00092 FEA7 SBRS R10,7
00093 C002 RJMP 0x0096
(0037) {set_sid;}
00094 9AAE SBI 0x15,6
00095 C001 RJMP 0x0097
(0038) else
(0039) {clr_sid;}
00096 98AE CBI 0x15,6
(0040) data=data<<1;
00097 0CAA LSL R10
(0041) delay();
00098 DFD5 RCALL _delay
(0042) set_clk;
00099 9AAF SBI 0x15,7
(0043) delay();
0009A DFD3 RCALL _delay
(0044) clr_clk;
0009B 98AF CBI 0x15,7
0009C 94CA DEC R12
0009D 20CC TST R12
0009E F799 BNE 0x0092
0009F 90C9 LD R12,Y+
000A0 90A9 LD R10,Y+
000A1 9508 RET
_write_shuju:
b --> R20
a --> R10
000A2 92AA ST -Y,R10
000A3 934A ST -Y,R20
000A4 2F42 MOV R20,R18
000A5 2EA0 MOV R10,R16
(0045) }
(0046) }
(0047) void write_shuju(uchar a,uchar b)
(0048) {
(0049) clr_clk;
000A6 98AF CBI 0x15,7
(0050)
(0051) wr_bit(5,0xFF);
000A7 EF2F LDI R18,0xFF
000A8 E005 LDI R16,5
000A9 DFE3 RCALL _wr_bit
(0052)
(0053) wr_bit(1,0x00);
000AA 2722 CLR R18
000AB E001 LDI R16,1
000AC DFE0 RCALL _wr_bit
(0054)
(0055) if(a==0)
000AD 20AA TST R10
000AE F421 BNE 0x00B3
(0056) wr_bit(1,0x00);
000AF 2722 CLR R18
000B0 E001 LDI R16,1
000B1 DFDB RCALL _wr_bit
000B2 C003 RJMP 0x00B6
(0057) else
(0058) wr_bit(1,0x80);
000B3 E820 LDI R18,0x80
000B4 E001 LDI R16,1
000B5 DFD7 RCALL _wr_bit
(0059)
(0060) wr_bit(1,0x00); //写入一个0
000B6 2722 CLR R18
000B7 E001 LDI R16,1
000B8 DFD4 RCALL _wr_bit
(0061)
(0062) wr_bit(4,b); //写入数据的高4位
000B9 2F24 MOV R18,R20
000BA E004 LDI R16,4
000BB DFD1 RCALL _wr_bit
(0063)
(0064) wr_bit(4,0x00); //写入4个0
000BC 2722 CLR R18
000BD E004 LDI R16,4
000BE DFCE RCALL _wr_bit
(0065)
(0066) wr_bit(4,(b<<4)); //写入数据的低4位
000BF 2F24 MOV R18,R20
000C0 702F ANDI R18,0xF
000C1 9522 SWAP R18
000C2 E004 LDI R16,4
000C3 DFC9 RCALL _wr_bit
(0067)
(0068) wr_bit(4,0x00); //写入4个0
000C4 2722 CLR R18
000C5 E004 LDI R16,4
000C6 DFC6 RCALL _wr_bit
(0069)
(0070) set_sid;
000C7 9AAE SBI 0x15,6
000C8 9149 LD R20,Y+
000C9 90A9 LD R10,Y+
000CA 9508 RET
(0071) }
(0072) void lcd12864_init()
(0073) {
(0074) write_shuju(0,0x30); //设置数据方式:8位
_lcd12864_init:
000CB E320 LDI R18,0x30
000CC 2700 CLR R16
000CD DFD4 RCALL _write_shuju
(0075) delay_us(200);
000CE EC08 LDI R16,0xC8
000CF E010 LDI R17,0
000D0 DFA0 RCALL _delay_us
(0076) write_shuju(0,0x30); //设置数据方式:8位
000D1 E320 LDI R18,0x30
000D2 2700 CLR R16
000D3 DFCE RCALL _write_shuju
(0077) delay_us(80);
000D4 E500 LDI R16,0x50
000D5 E010 LDI R17,0
000D6 DF9A RCALL _delay_us
(0078) write_shuju(0,0x0C); //开显示
000D7 E02C LDI R18,0xC
000D8 2700 CLR R16
000D9 DFC8 RCALL _write_shuju
(0079) delay_us(80);
000DA E500 LDI R16,0x50
000DB E010 LDI R17,0
000DC DF94 RCALL _delay_us
(0080) write_shuju(0,0x40); //开显示
000DD E420 LDI R18,0x40
000DE 2700 CLR R16
000DF DFC2 RCALL _write_shuju
(0081) delay_us(200);
000E0 EC08 LDI R16,0xC8
000E1 E010 LDI R17,0
000E2 DF8E RCALL _delay_us
(0082) write_shuju(0,0x01); //清屏
000E3 E021 LDI R18,1
000E4 2700 CLR R16
000E5 DFBC RCALL _write_shuju
(0083) delay_ms(100);
000E6 E604 LDI R16,0x64
000E7 E010 LDI R17,0
000E8 CF90 RJMP _delay_ms
_write_hz:
s --> R20
000E9 934A ST -Y,R20
000EA 935A ST -Y,R21
000EB 01A8 MOVW R20,R16
(0084)
(0085) }
(0086) void write_hz(char *s)
(0087) {
000EC C006 RJMP 0x00F3
(0088) while(*s)
(0089) {
(0090) write_shuju(1,*s);
000ED 01FA MOVW R30,R20
000EE 8120 LD R18,Z
000EF E001 LDI R16,1
000F0 DFB1 RCALL _write_shuju
(0091) s++;
000F1 5F4F SUBI R20,0xFF
000F2 4F5F SBCI R21,0xFF
000F3 01FA MOVW R30,R20
000F4 8020 LD R2,Z
000F5 2022 TST R2
000F6 F7B1 BNE 0x00ED
000F7 9159 LD R21,Y+
000F8 9149 LD R20,Y+
000F9 9508 RET
_locate:
y --> R20
x --> R10
000FA 940E 01F6 CALL push_xgsetF00C
000FC 2F42 MOV R20,R18
000FD 2EA0 MOV R10,R16
(0092) }
(0093) }
(0094) void locate(uchar x,uchar y)
(0095) {
(0096) switch(x)
000FE 2D6A MOV R22,R10
000FF 2777 CLR R23
00100 3061 CPI R22,1
00101 E0E0 LDI R30,0
00102 077E CPC R23,R30
00103 F069 BEQ 0x0111
00104 3062 CPI R22,2
00105 E0E0 LDI R30,0
00106 077E CPC R23,R30
00107 F079 BEQ 0x0117
00108 3063 CPI R22,3
00109 E0E0 LDI R30,0
0010A 077E CPC R23,R30
0010B F089 BEQ 0x011D
0010C 3064 CPI R22,4
0010D E0E0 LDI R30,0
0010E 077E CPC R23,R30
0010F F099 BEQ 0x0123
00110 C017 RJMP 0x0128
(0097) {
(0098) case 1:write_shuju(0,(0x80+y-1)); break;
00111 2F24 MOV R18,R20
00112 5820 SUBI R18,0x80
00113 5021 SUBI R18,1
00114 2700 CLR R16
00115 DF8C RCALL _write_shuju
00116 C011 RJMP 0x0128
(0099) case 2:write_shuju(0,(0x90+y-1));break;
00117 2F24 MOV R18,R20
00118 5720 SUBI R18,0x70
00119 5021 SUBI R18,1
0011A 2700 CLR R16
0011B DF86 RCALL _write_shuju
0011C C00B RJMP 0x0128
(0100) case 3:write_shuju(0,(0x88+y-1));break;
0011D 2F24 MOV R18,R20
0011E 5728 SUBI R18,0x78
0011F 5021 SUBI R18,1
00120 2700 CLR R16
00121 DF80 RCALL _write_shuju
00122 C005 RJMP 0x0128
(0101) case 4:write_shuju(0,(0x98+y-1));break;
00123 2F24 MOV R18,R20
00124 5628 SUBI R18,0x68
00125 5021 SUBI R18,1
00126 2700 CLR R16
00127 DF7A RCALL _write_shuju
(0102) default:break;
00128 940C 01FD JMP pop_xgsetF00C
(0103) }
(0104) }
(0105) void cls()
(0106) {
(0107) delay_us(200);
_cls:
0012A EC08 LDI R16,0xC8
0012B E010 LDI R17,0
0012C DF44 RCALL _delay_us
(0108) write_shuju(0,0x01); //清屏
0012D E021 LDI R18,1
0012E 2700 CLR R16
0012F DF72 RCALL _write_shuju
(0109) delay_ms(20);
00130 E104 LDI R16,0x14
00131 E010 LDI R17,0
00132 CF46 RJMP _delay_ms
_mega16_adc:
addata --> R10
00133 92AA ST -Y,R10
00134 92BA ST -Y,R11
FILE: F:\新学习板程序\avr程序\181286~1\12864_~1\adc.h
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) uint mega16_adc()
(0006) {
(0007) uint addata;
(0008) DDRA&=~BIT(0);
00135 98D0 CBI 0x1A,0
(0009) PORTA&=~BIT(0);
00136 98D8 CBI 0x1B,0
(0010) ADMUX=0x40;
00137 E480 LDI R24,0x40
00138 B987 OUT 0x07,R24
(0011) ADCSR=0X80;
00139 E880 LDI R24,0x80
0013A B986 OUT 0x06,R24
(0012) ADCSR|=BIT(6);
0013B 9A36 SBI 0x06,6
(0013) while(!(ADCSR&(BIT(4))));
0013C 9B34 SBIS 0x06,4
0013D CFFE RJMP 0x013C
(0014) addata=ADCL;
0013E B0A4 IN R10,0x04
0013F 24BB CLR R11
(0015) addata=addata+ADCH*256;
00140 B125 IN R18,0x05
00141 2733 CLR R19
00142 E000 LDI R16,0
00143 E011 LDI R17,1
00144 940E 01E6 CALL empy16s
00146 0EA0 ADD R10,R16
00147 1EB1 ADC R11,R17
(0016) return addata;
00148 0185 MOVW R16,R10
00149 90B9 LD R11,Y+
0014A 90A9 LD R10,Y+
0014B 9508 RET
FILE: F:\新学习板程序\avr程序\181286~1\12864_~1\zz.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include "12864.h"
(0004) #include "adc.h"
(0005) #define uchar unsigned char
(0006) #define uint unsigned int
(0007) void port_init()
(0008) {
(0009) DDRD = 0xFF;
_port_init:
0014C EF8F LDI R24,0xFF
0014D BB81 OUT 0x11,R24
(0010) PORTD = 0x00;
0014E 2422 CLR R2
0014F BA22 OUT 0x12,R2
(0011) DDRC = 0xFF;
00150 BB84 OUT 0x14,R24
(0012) PORTC = 0x00;
00151 BA25 OUT 0x15,R2
(0013) DDRA = 0xFE;
00152 EF8E LDI R24,0xFE
00153 BB8A OUT 0x1A,R24
(0014) PORTA = 0x00;
00154 BA2B OUT 0x1B,R2
(0015) PORTC|=BIT(2)+BIT(5);
00155 B385 IN R24,0x15
00156 6284 ORI R24,0x24
00157 BB85 OUT 0x15,R24
(0016) PORTC&=~BIT(4);
00158 98AC CBI 0x15,4
00159 9508 RET
(0017) }
(0018) void main()
(0019) {
(0020) uint adc;
(0021) port_init();
_main:
adc --> R10
0015A DFF1 RCALL _port_init
(0022) lcd12864_init();
0015B DF6F RCALL _lcd12864_init
(0023) cls();
0015C DFCD RCALL _cls
(0024) delay_ms(2);
0015D E002 LDI R16,2
0015E E010 LDI R17,0
0015F DF19 RCALL _delay_ms
(0025) locate(1,3);write_hz("滨州学院");
00160 E023 LDI R18,3
00161 E001 LDI R16,1
00162 DF97 RCALL _locate
00163 E905 LDI R16,0x95
00164 E010 LDI R17,0
00165 DF83 RCALL _write_hz
(0026) locate(2,1);write_hz("创新实验室 OK");
00166 E021 LDI R18,1
00167 E002 LDI R16,2
00168 DF91 RCALL _locate
00169 E806 LDI R16,0x86
0016A E010 LDI R17,0
0016B DF7D RCALL _write_hz
(0027) locate(3,1);write_hz("ATmega16 ADC学习");
0016C E021 LDI R18,1
0016D E003 LDI R16,3
0016E DF8B RCALL _locate
0016F E705 LDI R16,0x75
00170 E010 LDI R17,0
00171 DF77 RCALL _write_hz
(0028) locate(4,1);write_hz("测量电压 V");
00172 E021 LDI R18,1
00173 E004 LDI R16,4
00174 DF85 RCALL _locate
00175 E604 LDI R16,0x64
00176 E010 LDI R17,0
00177 DF71 RCALL _write_hz
00178 C04F RJMP 0x01C8
(0029) while(1)
(0030) {
(0031) adc=mega16_adc()*4.888;
00179 DFB9 RCALL _mega16_adc
0017A 0138 MOVW R6,R16
0017B E504 LDI R16,0x54
0017C E010 LDI R17,0
0017D 940E 020D CALL lpm32
0017F 0118 MOVW R2,R16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -