📄 12864.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 51CE SUBI R28,0x1E
00050 40D0 SBCI R29,0
00051 EA0A LDI R16,0xAA
00052 8308 ST Y,R16
00053 2400 CLR R0
00054 E9ED LDI R30,0x9D
00055 E0F0 LDI R31,0
00056 E010 LDI R17,0
00057 39ED CPI R30,0x9D
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 39E5 CPI R30,0x95
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 0158 CALL _main
_exit:
0006D CFFF RJMP _exit
FILE: E:\AVR自编程序\11avr实验板\1812864串口\12864串口.c
(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
(0018) NOP();
00070 0000 NOP
(0019) NOP();
00071 0000 NOP
(0020) NOP();
00072 0000 NOP
00073 9508 RET
(0021)
(0022) }
(0023) void delay_us(uint i)
(0024) {
(0025) while(i--)
_delay_us:
i --> R16
00074 0118 MOVW R2,R16
00075 5001 SUBI R16,1
00076 4010 SBCI R17,0
00077 2022 TST R2
00078 F7D9 BNE 0x0074
00079 2033 TST R3
0007A F7C9 BNE 0x0074
0007B 9508 RET
_delay_ms:
a --> R20
i --> R16
0007C 934A ST -Y,R20
0007D 935A ST -Y,R21
(0026) {;;;;;;;;}
(0027) }
(0028) void delay_ms(uint i)
(0029) {
(0030) uint a;
(0031) for(;i;i--)
0007E C00B RJMP 0x008A
(0032) {
(0033) for(a=0;a<1141;a++);
0007F 2744 CLR R20
00080 2755 CLR R21
00081 C002 RJMP 0x0084
00082 5F4F SUBI R20,0xFF
00083 4F5F SBCI R21,0xFF
00084 3745 CPI R20,0x75
00085 E0E4 LDI R30,4
00086 075E CPC R21,R30
00087 F3D0 BCS 0x0082
00088 5001 SUBI R16,1
00089 4010 SBCI R17,0
0008A 3000 CPI R16,0
0008B 0701 CPC R16,R17
0008C F791 BNE 0x007F
0008D 9159 LD R21,Y+
0008E 9149 LD R20,Y+
0008F 9508 RET
_wr_bit:
data --> R10
n --> R12
00090 92AA ST -Y,R10
00091 92CA ST -Y,R12
00092 2EA2 MOV R10,R18
00093 2EC0 MOV R12,R16
(0034) }
(0035) }
(0036) void wr_bit(uchar n,uchar data)
(0037) {
(0038) for(;n;n--) //写入位数
00094 C00B RJMP 0x00A0
(0039) {
(0040) if(data&0x80)
00095 FEA7 SBRS R10,7
00096 C002 RJMP 0x0099
(0041) {set_sid;}
00097 9AAE SBI 0x15,6
00098 C001 RJMP 0x009A
(0042) else
(0043) {clr_sid;}
00099 98AE CBI 0x15,6
(0044) data=data<<1;
0009A 0CAA LSL R10
(0045) delay();
0009B DFD2 RCALL _delay
(0046) set_clk;
0009C 9AAF SBI 0x15,7
(0047) delay();
0009D DFD0 RCALL _delay
(0048) clr_clk;
0009E 98AF CBI 0x15,7
0009F 94CA DEC R12
000A0 20CC TST R12
000A1 F799 BNE 0x0095
000A2 90C9 LD R12,Y+
000A3 90A9 LD R10,Y+
000A4 9508 RET
_write_shuju:
b --> R20
a --> R10
000A5 92AA ST -Y,R10
000A6 934A ST -Y,R20
000A7 2F42 MOV R20,R18
000A8 2EA0 MOV R10,R16
(0049) }
(0050) }
(0051) void write_shuju(uchar a,uchar b)
(0052) {
(0053) clr_clk;
000A9 98AF CBI 0x15,7
(0054)
(0055) wr_bit(5,0xFF);
000AA EF2F LDI R18,0xFF
000AB E005 LDI R16,5
000AC DFE3 RCALL _wr_bit
(0056)
(0057) wr_bit(1,0x00);
000AD 2722 CLR R18
000AE E001 LDI R16,1
000AF DFE0 RCALL _wr_bit
(0058)
(0059) if(a==0)
000B0 20AA TST R10
000B1 F421 BNE 0x00B6
(0060) wr_bit(1,0x00);
000B2 2722 CLR R18
000B3 E001 LDI R16,1
000B4 DFDB RCALL _wr_bit
000B5 C003 RJMP 0x00B9
(0061) else
(0062) wr_bit(1,0x80);
000B6 E820 LDI R18,0x80
000B7 E001 LDI R16,1
000B8 DFD7 RCALL _wr_bit
(0063)
(0064) wr_bit(1,0x00); //写入一个0
000B9 2722 CLR R18
000BA E001 LDI R16,1
000BB DFD4 RCALL _wr_bit
(0065)
(0066) wr_bit(4,b); //写入数据的高4位
000BC 2F24 MOV R18,R20
000BD E004 LDI R16,4
000BE DFD1 RCALL _wr_bit
(0067)
(0068) wr_bit(4,0x00); //写入4个0
000BF 2722 CLR R18
000C0 E004 LDI R16,4
000C1 DFCE RCALL _wr_bit
(0069)
(0070) wr_bit(4,(b<<4)); //写入数据的低4位
000C2 2F24 MOV R18,R20
000C3 702F ANDI R18,0xF
000C4 9522 SWAP R18
000C5 E004 LDI R16,4
000C6 DFC9 RCALL _wr_bit
(0071)
(0072) wr_bit(4,0x00); //写入4个0
000C7 2722 CLR R18
000C8 E004 LDI R16,4
000C9 DFC6 RCALL _wr_bit
(0073)
(0074) set_sid;
000CA 9AAE SBI 0x15,6
000CB 9149 LD R20,Y+
000CC 90A9 LD R10,Y+
000CD 9508 RET
(0075) }
(0076) void lcd12864_init()
(0077) {
(0078) delay_ms(50);
_lcd12864_init:
000CE E302 LDI R16,0x32
000CF E010 LDI R17,0
000D0 DFAB RCALL _delay_ms
(0079) delay_ms(100);
000D1 E604 LDI R16,0x64
000D2 E010 LDI R17,0
000D3 DFA8 RCALL _delay_ms
(0080) delay_ms(200);
000D4 EC08 LDI R16,0xC8
000D5 E010 LDI R17,0
000D6 DFA5 RCALL _delay_ms
(0081)
(0082) write_shuju(0,0x30); //设置数据方式:8位
000D7 E320 LDI R18,0x30
000D8 2700 CLR R16
000D9 DFCB RCALL _write_shuju
(0083) delay_us(200);
000DA EC08 LDI R16,0xC8
000DB E010 LDI R17,0
000DC DF97 RCALL _delay_us
(0084) write_shuju(0,0x30); //设置数据方式:8位
000DD E320 LDI R18,0x30
000DE 2700 CLR R16
000DF DFC5 RCALL _write_shuju
(0085) delay_us(80);
000E0 E500 LDI R16,0x50
000E1 E010 LDI R17,0
000E2 DF91 RCALL _delay_us
(0086) write_shuju(0,0x0C); //开显示
000E3 E02C LDI R18,0xC
000E4 2700 CLR R16
000E5 DFBF RCALL _write_shuju
(0087) delay_us(80);
000E6 E500 LDI R16,0x50
000E7 E010 LDI R17,0
000E8 DF8B RCALL _delay_us
(0088) write_shuju(0,0x40); //开显示
000E9 E420 LDI R18,0x40
000EA 2700 CLR R16
000EB DFB9 RCALL _write_shuju
(0089) delay_us(200);
000EC EC08 LDI R16,0xC8
000ED E010 LDI R17,0
000EE DF85 RCALL _delay_us
(0090) write_shuju(0,0x01); //清屏
000EF E021 LDI R18,1
000F0 2700 CLR R16
000F1 DFB3 RCALL _write_shuju
(0091) delay_ms(200);
000F2 EC08 LDI R16,0xC8
000F3 E010 LDI R17,0
000F4 CF87 RJMP _delay_ms
_write_hz:
s --> R20
000F5 934A ST -Y,R20
000F6 935A ST -Y,R21
000F7 01A8 MOVW R20,R16
(0092) }
(0093) void write_hz(char *s)
(0094) {
000F8 C006 RJMP 0x00FF
(0095) while(*s)
(0096) {
(0097) write_shuju(1,*s);
000F9 01FA MOVW R30,R20
000FA 8120 LD R18,Z
000FB E001 LDI R16,1
000FC DFA8 RCALL _write_shuju
(0098) s++;
000FD 5F4F SUBI R20,0xFF
000FE 4F5F SBCI R21,0xFF
000FF 01FA MOVW R30,R20
00100 8020 LD R2,Z
00101 2022 TST R2
00102 F7B1 BNE 0x00F9
00103 9159 LD R21,Y+
00104 9149 LD R20,Y+
00105 9508 RET
_locate:
y --> R20
x --> R10
00106 940E 01ED CALL push_xgsetF00C
00108 2F42 MOV R20,R18
00109 2EA0 MOV R10,R16
(0099) }
(0100) }
(0101) void locate(uchar x,uchar y)
(0102) {
(0103) switch(x)
0010A 2D6A MOV R22,R10
0010B 2777 CLR R23
0010C 3061 CPI R22,1
0010D E0E0 LDI R30,0
0010E 077E CPC R23,R30
0010F F069 BEQ 0x011D
00110 3062 CPI R22,2
00111 E0E0 LDI R30,0
00112 077E CPC R23,R30
00113 F079 BEQ 0x0123
00114 3063 CPI R22,3
00115 E0E0 LDI R30,0
00116 077E CPC R23,R30
00117 F089 BEQ 0x0129
00118 3064 CPI R22,4
00119 E0E0 LDI R30,0
0011A 077E CPC R23,R30
0011B F099 BEQ 0x012F
0011C C017 RJMP 0x0134
(0104) {
(0105) case 1:write_shuju(0,(0x80+y-1)); break;
0011D 2F24 MOV R18,R20
0011E 5820 SUBI R18,0x80
0011F 5021 SUBI R18,1
00120 2700 CLR R16
00121 DF83 RCALL _write_shuju
00122 C011 RJMP 0x0134
(0106) case 2:write_shuju(0,(0x90+y-1));break;
00123 2F24 MOV R18,R20
00124 5720 SUBI R18,0x70
00125 5021 SUBI R18,1
00126 2700 CLR R16
00127 DF7D RCALL _write_shuju
00128 C00B RJMP 0x0134
(0107) case 3:write_shuju(0,(0x88+y-1));break;
00129 2F24 MOV R18,R20
0012A 5728 SUBI R18,0x78
0012B 5021 SUBI R18,1
0012C 2700 CLR R16
0012D DF77 RCALL _write_shuju
0012E C005 RJMP 0x0134
(0108) case 4:write_shuju(0,(0x98+y-1));break;
0012F 2F24 MOV R18,R20
00130 5628 SUBI R18,0x68
00131 5021 SUBI R18,1
00132 2700 CLR R16
00133 DF71 RCALL _write_shuju
(0109) default:break;
00134 940C 01F4 JMP pop_xgsetF00C
(0110) }
(0111) }
(0112) void cls()
(0113) {
(0114) delay_us(200);
_cls:
00136 EC08 LDI R16,0xC8
00137 E010 LDI R17,0
00138 DF3B RCALL _delay_us
(0115) write_shuju(0,0x01); //清屏
00139 E021 LDI R18,1
0013A 2700 CLR R16
0013B DF69 RCALL _write_shuju
(0116) delay_ms(20);
0013C E104 LDI R16,0x14
0013D E010 LDI R17,0
0013E CF3D RJMP _delay_ms
_mega16_adc:
addata --> R10
0013F 92AA ST -Y,R10
00140 92BA ST -Y,R11
(0117) }
(0118)
(0119) uint mega16_adc()
(0120) {
(0121) uint addata;
(0122) DDRA&=~BIT(0);
00141 98D0 CBI 0x1A,0
(0123) PORTA&=~BIT(0);
00142 98D8 CBI 0x1B,0
(0124) ADMUX=0x40;
00143 E480 LDI R24,0x40
00144 B987 OUT 0x07,R24
(0125) ADCSR=0X80;
00145 E880 LDI R24,0x80
00146 B986 OUT 0x06,R24
(0126) ADCSR|=BIT(6);
00147 9A36 SBI 0x06,6
(0127) while(!(ADCSR&(BIT(4))));
00148 9B34 SBIS 0x06,4
00149 CFFE RJMP 0x0148
(0128) addata=ADCL;
0014A B0A4 IN R10,0x04
0014B 24BB CLR R11
(0129) addata=addata+ADCH*256;
0014C B125 IN R18,0x05
0014D 2733 CLR R19
0014E E000 LDI R16,0
0014F E011 LDI R17,1
00150 940E 01DD CALL empy16s
00152 0EA0 ADD R10,R16
00153 1EB1 ADC R11,R17
(0130) return addata;
00154 0185 MOVW R16,R10
00155 90B9 LD R11,Y+
00156 90A9 LD R10,Y+
00157 9508 RET
(0131) }
(0132)
(0133) void main()
(0134) {
(0135) uint adc;
(0136)
(0137) DDRC|=BIT(5);
_main:
adc --> R10
00158 9AA5 SBI 0x14,5
(0138) DDRC|=BIT(4);
00159 9AA4 SBI 0x14,4
(0139) PORTC&=~BIT(4);
0015A 98AC CBI 0x15,4
(0140) PORTC|=BIT(5);
0015B 9AAD SBI 0x15,5
(0141)
(0142) lcd12864_init();
0015C DF71 RCALL _lcd12864_init
(0143) cls();
0015D DFD8 RCALL _cls
(0144) delay_ms(2);
0015E E002 LDI R16,2
0015F E010 LDI R17,0
00160 DF1B RCALL _delay_ms
(0145)
(0146) locate(1,3);write_hz("滨州学院");
00161 E023 LDI R18,3
00162 E001 LDI R16,1
00163 DFA2 RCALL _locate
00164 E904 LDI R16,0x94
00165 E010 LDI R17,0
00166 DF8E RCALL _write_hz
(0147) locate(2,1);write_hz("创新实验室 OK");
00167 E021 LDI R18,1
00168 E002 LDI R16,2
00169 DF9C RCALL _locate
0016A E805 LDI R16,0x85
0016B E010 LDI R17,0
0016C DF88 RCALL _write_hz
(0148) locate(3,1);write_hz("ATmega16 ADC学习");
0016D E021 LDI R18,1
0016E E003 LDI R16,3
0016F DF96 RCALL _locate
00170 E704 LDI R16,0x74
00171 E010 LDI R17,0
00172 DF82 RCALL _write_hz
(0149) locate(4,1);write_hz("测量电压 V");
00173 E021 LDI R18,1
00174 E004 LDI R16,4
00175 DF90 RCALL _locate
00176 E604 LDI R16,0x64
00177 E010 LDI R17,0
00178 DF7C RCALL _write_hz
00179 C045 RJMP 0x01BF
(0150) while(1)
(0151) {
(0152) adc=mega16_adc()*4.888;
0017A DFC4 RCALL _mega16_adc
0017B 0138 MOVW R6,R16
0017C E504 LDI R16,0x54
0017D E010 LDI R17,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -