📄 dac.lst
字号:
0140 92200154 STS adc_mux,R2
(0060) uart_init();
0142 D090 RCALL _uart_init
(0061) timer1_init();
0143 DF9B RCALL _timer1_init
(0062) adc_init();
0144 DF33 RCALL _adc_init
(0063) //GICR = 0xC0;//int0,int1中断使能
(0064) SEI();
0145 9478 BSET 7
(0065) EIMSK=3;
0146 E083 LDI R24,3
0147 BB8D OUT 0x1D,R24
(0066) // EICRA=0;
(0067) adc_rel=0;
0148 2422 CLR R2
0149 2433 CLR R3
014A 92300156 STS adc_rel+1,R3
014C 92200155 STS adc_rel,R2
(0068) puts("广州天河双龙电子公司");
014E E30D LDI R16,0x3D
014F E011 LDI R17,1
0150 D070 RCALL _puts
(0069) puts("HTTP://WWW.SL.COM.CN");
0151 E208 LDI R16,0x28
0152 E011 LDI R17,1
0153 D06D RCALL _puts
(0070) puts("MEGA48开发板DAC测试程序");
0154 E100 LDI R16,0x10
0155 E011 LDI R17,1
0156 D06A RCALL _puts
0157 C059 RJMP 0x01B1
(0071)
(0072) while(1)
(0073) {
(0074) i=getchar();
0158 D061 RCALL _getchar
0159 2EA0 MOV R10,R16
(0075) switch (i)
015A 2D4A MOV R20,R10
015B 2755 CLR R21
015C 344D CPI R20,0x4D
015D E0E0 LDI R30,0
015E 075E CPC R21,R30
015F F409 BNE 0x0161
0160 C03C RJMP 0x019D
0161 344F CPI R20,0x4F
0162 E0E0 LDI R30,0
0163 075E CPC R21,R30
0164 F161 BEQ 0x0191
0165 3542 CPI R20,0x52
0166 E0E0 LDI R30,0
0167 075E CPC R21,R30
0168 F409 BNE 0x016A
0169 C039 RJMP 0x01A3
016A 3543 CPI R20,0x53
016B E0E0 LDI R30,0
016C 075E CPC R21,R30
016D F029 BEQ 0x0173
016E 3544 CPI R20,0x54
016F E0E0 LDI R30,0
0170 075E CPC R21,R30
0171 F029 BEQ 0x0177
0172 C03E RJMP 0x01B1
(0076) {
(0077) case 'S'://MEGA8 DAC程序ID
(0078) {
(0079) puts("DAC TEST ver1.0");
0173 E000 LDI R16,0
0174 E011 LDI R17,1
0175 D04B RCALL _puts
(0080) break;
0176 C03A RJMP 0x01B1
(0081) }
(0082) case 'T'://调节输出电压
(0083) {
(0084) temp=getchar();
0177 D042 RCALL _getchar
0178 2F60 MOV R22,R16
0179 2777 CLR R23
(0085) temp=temp<<8;
017A 2F76 MOV R23,R22
017B 2766 CLR R22
(0086) temp|=getchar();
017C D03D RCALL _getchar
017D 2E20 MOV R2,R16
017E 2433 CLR R3
017F 2962 OR R22,R2
0180 2973 OR R23,R3
(0087) if (temp<0x400)
0181 3060 CPI R22,0
0182 E0E4 LDI R30,4
0183 077E CPC R23,R30
0184 F428 BCC 0x018A
(0088) OCR1A=temp;
0185 93700089 STS 0x89,R23
0187 93600088 STS 0x88,R22
0189 C027 RJMP 0x01B1
(0089) else
(0090) OCR1A=0x3ff;
018A EF8F LDI R24,0xFF
018B E093 LDI R25,3
018C 93900089 STS 0x89,R25
018E 93800088 STS 0x88,R24
(0091) break;
0190 C020 RJMP 0x01B1
(0092) }
(0093) case 'O'://读取OCR1A寄存器值
(0094) {
(0095) temp=OCR1A;
0191 91600088 LDS R22,0x88
0193 91700089 LDS R23,0x89
(0096) putchar(temp/256);
0195 018B MOVW R16,R22
0196 2F01 MOV R16,R17
0197 2711 CLR R17
0198 D01A RCALL _putchar
(0097) putchar(temp%256);
0199 2F06 MOV R16,R22
019A 7010 ANDI R17,0
019B D017 RCALL _putchar
(0098) break;
019C C014 RJMP 0x01B1
(0099) }
(0100) case 'M'://设置ADC工作通道
(0101) {
(0102) adc_mux=getchar()&0x03;
019D D01C RCALL _getchar
019E 2F80 MOV R24,R16
019F 7083 ANDI R24,3
01A0 93800154 STS adc_mux,R24
(0103) break;
01A2 C00E RJMP 0x01B1
(0104) }
(0105) case 'R'://读取ADC通道及ADC转换结果
(0106) {
(0107) putchar(adc_mux);
01A3 91000154 LDS R16,adc_mux
01A5 D00D RCALL _putchar
(0108) putchar(adc_old/256);
01A6 91000157 LDS R16,adc_old
01A8 91100158 LDS R17,adc_old+1
01AA 2F01 MOV R16,R17
01AB 2711 CLR R17
01AC D006 RCALL _putchar
(0109) putchar(adc_old%256);
01AD 91000157 LDS R16,adc_old
01AF 7010 ANDI R17,0
01B0 D002 RCALL _putchar
01B1 CFA6 RJMP 0x0158
01B2 9508 RET
FILE: C:\调试程序\mega48\DAC\uart.c
(0001) // 1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
(0002) // 2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
(0003) // 通信波特率为19200(Tools->Environment Options...)。
(0004) // 3、将PC屏幕光标定位于调试窗口中。
(0005) #include <iom48v.h>
(0006) #define fosc 8000000 //晶振8MHZ
(0007) #define baud 19200 //波特率
(0008) /* 字符输出函数 */
(0009) void putchar(unsigned char c)
(0010) {
(0011) while (!(UCSR0A&(1<<UDRE0)));
_putchar:
c --> R16
01B3 902000C0 LDS R2,0xC0
01B5 FE25 SBRS R2,5
01B6 CFFC RJMP _putchar
(0012) UDR0=c;
01B7 930000C6 STS 0xC6,R16
01B9 9508 RET
(0013) }
(0014) /* 字符输入函数 */
(0015) unsigned char getchar(void)
(0016) {
(0017) while(!(UCSR0A& (1<<RXC0)));
_getchar:
01BA 902000C0 LDS R2,0xC0
01BC FE27 SBRS R2,7
01BD CFFC RJMP _getchar
(0018) return UDR0;
01BE 910000C6 LDS R16,0xC6
01C0 9508 RET
_puts:
s --> R20
01C1 D026 RCALL push_gset1
01C2 01A8 MOVW R20,R16
(0019) }
(0020) /* 字符串输出函数 */
(0021) void puts(char *s)
(0022) {
01C3 C005 RJMP 0x01C9
(0023) while (*s)
(0024) {
(0025) putchar(*s);
01C4 01FA MOVW R30,R20
01C5 8100 LDD R16,Z+0
01C6 DFEC RCALL _putchar
(0026) s++;
01C7 5F4F SUBI R20,0xFF
01C8 4F5F SBCI R21,0xFF
01C9 01FA MOVW R30,R20
01CA 8020 LDD R2,Z+0
01CB 2022 TST R2
01CC F7B9 BNE 0x01C4
(0027) }
(0028) putchar(0x0a);//回车换行
01CD E00A LDI R16,0xA
01CE DFE4 RCALL _putchar
(0029) putchar(0x0d);
01CF E00D LDI R16,0xD
01D0 DFE2 RCALL _putchar
01D1 D019 RCALL pop_gset1
01D2 9508 RET
(0030) }
(0031) /* UART初始化 */
(0032) void uart_init(void)
(0033) {
(0034) UCSR0B=(1<<RXEN0)|(1<<TXEN0);//允许发送和接收
_uart_init:
01D3 E188 LDI R24,0x18
01D4 938000C1 STS 0xC1,R24
(0035) UBRR0L=(fosc/16/(baud+1))%256;
01D6 E18A LDI R24,0x1A
01D7 938000C4 STS 0xC4,R24
(0036) UBRR0H=(fosc/16/(baud+1))/256;
01D9 2422 CLR R2
01DA 922000C5 STS 0xC5,R2
(0037) UCSR0C=(0<<UMSEL01)|(0<<UMSEL00)|(1<<UCSZ01)|(1<<UCSZ00);//8位数据+1位STOP位
FILE: <library>
01DC E086 LDI R24,6
01DD 938000C2 STS 0xC2,R24
01DF 9508 RET
push_gset5:
01E0 92FA ST R15,-Y
01E1 92EA ST R14,-Y
push_gset4:
01E2 92DA ST R13,-Y
01E3 92CA ST R12,-Y
push_gset3:
01E4 92BA ST R11,-Y
01E5 92AA ST R10,-Y
push_gset2:
01E6 937A ST R23,-Y
01E7 936A ST R22,-Y
push_gset1:
01E8 935A ST R21,-Y
01E9 934A ST R20,-Y
01EA 9508 RET
pop_gset1:
01EB E0E1 LDI R30,1
pop:
01EC 9149 LD R20,Y+
01ED 9159 LD R21,Y+
01EE FDE0 SBRC R30,0
01EF 9508 RET
01F0 9169 LD R22,Y+
01F1 9179 LD R23,Y+
01F2 FDE1 SBRC R30,1
01F3 9508 RET
01F4 90A9 LD R10,Y+
01F5 90B9 LD R11,Y+
01F6 FDE2 SBRC R30,2
01F7 9508 RET
01F8 90C9 LD R12,Y+
01F9 90D9 LD R13,Y+
01FA FDE3 SBRC R30,3
01FB 9508 RET
01FC 90E9 LD R14,Y+
01FD 90F9 LD R15,Y+
01FE 9508 RET
push_lset:
01FF 93FA ST R31,-Y
0200 93EA ST R30,-Y
0201 93BA ST R27,-Y
0202 93AA ST R26,-Y
0203 939A ST R25,-Y
0204 938A ST R24,-Y
0205 933A ST R19,-Y
0206 932A ST R18,-Y
0207 931A ST R17,-Y
0208 930A ST R16,-Y
0209 929A ST R9,-Y
020A 928A ST R8,-Y
020B 927A ST R7,-Y
020C 926A ST R6,-Y
020D 925A ST R5,-Y
020E 924A ST R4,-Y
020F 923A ST R3,-Y
0210 922A ST R2,-Y
0211 921A ST R1,-Y
0212 920A ST R0,-Y
0213 B60F IN R0,0x3F
0214 920A ST R0,-Y
0215 9508 RET
pop_lset:
0216 9009 LD R0,Y+
0217 BE0F OUT 0x3F,R0
0218 9009 LD R0,Y+
0219 9019 LD R1,Y+
021A 9029 LD R2,Y+
021B 9039 LD R3,Y+
021C 9049 LD R4,Y+
021D 9059 LD R5,Y+
021E 9069 LD R6,Y+
021F 9079 LD R7,Y+
0220 9089 LD R8,Y+
0221 9099 LD R9,Y+
0222 9109 LD R16,Y+
0223 9119 LD R17,Y+
0224 9129 LD R18,Y+
0225 9139 LD R19,Y+
0226 9189 LD R24,Y+
0227 9199 LD R25,Y+
0228 91A9 LD R26,Y+
0229 91B9 LD R27,Y+
022A 91E9 LD R30,Y+
022B 91F9 LD R31,Y+
022C 9508 RET
lsr16:
022D 2322 TST R18
022E F021 BEQ 0x0233
022F 9516 LSR R17
0230 9507 ROR R16
0231 952A DEC R18
0232 CFFA RJMP lsr16
0233 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -