📄 uart_pc.lst
字号:
__start:
__text_start:
11D EFCF LDI R28,0xFF
11E E1D0 LDI R29,0x10
11F BFCD OUT 0x3D,R28
120 BFDE OUT 0x3E,R29
121 51CE SUBI R28,0x1E
122 40D0 SBCI R29,0
123 EA0A LDI R16,0xAA
124 8308 STD Y+0,R16
125 2400 CLR R0
126 EAED LDI R30,0xAD
127 E0F2 LDI R31,2
128 E012 LDI R17,2
129 3AED CPI R30,0xAD
12A 07F1 CPC R31,R17
12B F011 BEQ 0x012E
12C 9201 ST R0,Z+
12D CFFB RJMP 0x0129
12E 8300 STD Z+0,R16
12F E8EC LDI R30,0x8C
130 E0F0 LDI R31,0
131 E0A0 LDI R26,0
132 E0B1 LDI R27,1
133 E012 LDI R17,2
134 E000 LDI R16,0
135 BF0B OUT 0x3B,R16
136 33E9 CPI R30,0x39
137 07F1 CPC R31,R17
138 F021 BEQ 0x013D
139 95C8 LPM
13A 9631 ADIW R30,1
13B 920D ST R0,X+
13C CFF9 RJMP 0x0136
13D 940E 017E CALL _main
_exit:
13F CFFF RJMP _exit
FILE: D:\16实验程序\串口通信\与计算机通信\uart0.h
(0001) #define uchar unsigned char
(0002)
(0003) void port_init(void)
(0004) {
(0005) PORTA = 0x00;
_port_init:
140 2422 CLR R2
141 BA2B OUT 0x1B,R2
(0006) DDRA = 0x00;
142 BA2A OUT 0x1A,R2
(0007) PORTB = 0x00;
143 BA28 OUT 0x18,R2
(0008) DDRB = 0x00;
144 BA27 OUT 0x17,R2
(0009) PORTC = 0x00; //m103 output only
145 BA25 OUT 0x15,R2
(0010) DDRC = 0x00;
146 BA24 OUT 0x14,R2
(0011) PORTD = 0x00;
147 BA22 OUT 0x12,R2
(0012) DDRD = 0x00;
148 BA21 OUT 0x11,R2
149 9508 RET
(0013) }
(0014)
(0015) //UART0 initialize
(0016) // desired baud rate: 9600
(0017) // actual: baud rate:9615 (0.2%)
(0018) void uart0_init(void)
(0019) {
(0020) UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
14A 2422 CLR R2
14B B82A OUT 0x0A,R2
(0021) UCSRA = 0x00;
14C B82B OUT 0x0B,R2
(0022) UCSRC = BIT(URSEL) | 0x06;
14D E886 LDI R24,0x86
14E BD80 OUT 0x20,R24
(0023) UBRRL = 0x67; //set baud rate lo
14F E687 LDI R24,0x67
150 B989 OUT 0x09,R24
(0024) UBRRH = 0x00; //set baud rate hi
151 BC20 OUT 0x20,R2
(0025) UCSRB = 0x18;
152 E188 LDI R24,0x18
153 B98A OUT 0x0A,R24
154 9508 RET
(0026) }
(0027)
(0028) //call this routine to initialize all peripherals
(0029) void init_devices(void)
(0030) {
(0031) //stop errant interrupts until set up
(0032) CLI(); //disable all interrupts
_init_devices:
155 94F8 BCLR 7
(0033) port_init();
156 DFE9 RCALL _port_init
(0034) uart0_init();
157 DFF2 RCALL _uart0_init
(0035)
(0036) MCUCR = 0x00;
158 2422 CLR R2
159 BE25 OUT 0x35,R2
(0037) GICR = 0x00;
15A BE2B OUT 0x3B,R2
(0038) TIMSK = 0x00; //timer interrupt sources
15B BE29 OUT 0x39,R2
(0039) SEI(); //re-enable interrupts
15C 9478 BSET 7
15D 9508 RET
(0040) //all peripherals are now initialized
(0041) }
(0042)
(0043) void uart_tx(uchar txc) //send a uchar data
(0044) {
(0045) while(!(UCSRA&(1<<UDRE))); //check send enable
_uart_tx:
txc --> R16
15E 9B5D SBIS 0x0B,5
15F CFFE RJMP _uart_tx
(0046) UDR=txc;
160 B90C OUT 0x0C,R16
161 9508 RET
FILE: D:\16实验程序\串口通信\与计算机通信\uart_pc.c
(0001) //串口通信程序
(0002) //向pc串口发送数据
(0003) //pc端使用 超级终端 建立连接
(0004) //9600 8位数据 1位停止
(0005)
(0006) #include <iom16v.h>
(0007) #include <macros.h>
(0008) #include "uart0.h"
(0009) #define uint unsigned int
(0010)
(0011)
(0012) uchar cn_00[]={"北京东控开发板\n\r"};
(0013) uchar cn_01[]={"ATmega16主芯片:16K Flash 1K SRAM 512Byte EEPROM\n\r"};
(0014) uchar cn_02[]={"I2C总线器件24C04,EEPROM数据存储器,4kBit EEPROM\n\r"};
(0015) uchar cn_03[]={"单总线DS18B20温度传感器\n\r"};
(0016) uchar cn_04[]={"RS232接口Max232A,主从接口(可与计算机或其他开发板通信)\n\r"};
(0017) uchar cn_05[]={"20个输入按键、1个复位按键\n\r"};
(0018) uchar cn_06[]={"8位动态扫描LED数码管、8位LED发光二极管\n\r"};
(0019) uchar cn_07[]={"1个无源蜂鸣器\n\r"};
(0020) uchar cn_08[]={"1路A/D输入可调电位器\n\r"};
(0021) uchar cn_09[]={"LCD1602和LCD12864液晶接口\n\r"};
(0022) uchar cn_10[]={"JTAG仿真接口\n\r"};
(0023) uchar cn_11[]={"AVR ISP下载接口\n\r"};
(0024) uchar cn_12[]={"DS1302时钟电路\n\r"};
(0025) uchar cn_13[]={"所有IO口全部引出,方便扩展实验及测试\n\r"};
(0026)
(0027)
(0028) ms(uint aa)
(0029) {
(0030) for(;aa>0;aa--);
_ms:
aa --> R16
162 C002 RJMP 0x0165
163 5001 SUBI R16,1
164 4010 SBCI R17,0
165 3000 CPI R16,0
166 0701 CPC R16,R17
167 F7D9 BNE 0x0163
168 9508 RET
_write_cn:
i --> R10
cn_nub --> R12
cn --> R14
169 940E 01CB CALL push_xgset00FC
16B 2EC2 MOV R12,R18
16C 0178 MOVW R14,R16
(0031) }
(0032)
(0033) void write_cn(uchar *cn,uchar cn_nub)
(0034) {
(0035) uchar i;
(0036) for(i=0;i<(cn_nub);i++)
16D 24AA CLR R10
16E C00B RJMP 0x017A
(0037) {
(0038) uart_tx(cn[i]); //发送数据i
16F 2DEA MOV R30,R10
170 27FF CLR R31
171 0DEE ADD R30,R14
172 1DFF ADC R31,R15
173 8100 LDD R16,Z+0
174 DFE9 RCALL _uart_tx
(0039) PORTA=i;
175 BAAB OUT 0x1B,R10
(0040) ms(60000);
176 E600 LDI R16,0x60
177 EE1A LDI R17,0xEA
178 DFE9 RCALL _ms
179 94A3 INC R10
17A 14AC CP R10,R12
17B F398 BCS 0x016F
17C 940C 01C0 JMP pop_xgset00FC
(0041) }
(0042) }
(0043)
(0044) //与计算机通信的程序
(0045) //计算机端使用超级终端,建立一个连接,9600,8位,1个停止位
(0046) main()
(0047) {
(0048) uchar i=0,rx_temp;
_main:
rx_temp --> Y,+1
i --> R10
17E 24AA CLR R10
(0049) init_devices(); //串行口初始化
17F DFD5 RCALL _init_devices
(0050)
(0051) DDRA=0xff;
180 EF8F LDI R24,0xFF
181 BB8A OUT 0x1A,R24
(0052) PORTA=0x00;
182 2422 CLR R2
183 BA2B OUT 0x1B,R2
(0053)
(0054) ms(3000);
184 EB08 LDI R16,0xB8
185 E01B LDI R17,0xB
186 DFDB RCALL _ms
(0055) write_cn(cn_00,16);
187 E120 LDI R18,0x10
188 E000 LDI R16,0
189 E011 LDI R17,1
18A DFDE RCALL _write_cn
(0056) write_cn(cn_01,50);
18B E322 LDI R18,0x32
18C E101 LDI R16,0x11
18D E011 LDI R17,1
18E DFDA RCALL _write_cn
(0057) write_cn(cn_02,50);
18F E322 LDI R18,0x32
190 E404 LDI R16,0x44
191 E011 LDI R17,1
192 DFD6 RCALL _write_cn
(0058) write_cn(cn_03,25);
193 E129 LDI R18,0x19
194 E707 LDI R16,0x77
195 E011 LDI R17,1
196 DFD2 RCALL _write_cn
(0059) write_cn(cn_04,59);
197 E32B LDI R18,0x3B
198 E901 LDI R16,0x91
199 E011 LDI R17,1
19A DFCE RCALL _write_cn
(0060) write_cn(cn_05,27);
19B E12B LDI R18,0x1B
19C EC0C LDI R16,0xCC
19D E011 LDI R17,1
19E DFCA RCALL _write_cn
(0061) write_cn(cn_06,40);
19F E228 LDI R18,0x28
1A0 EE08 LDI R16,0xE8
1A1 E011 LDI R17,1
1A2 DFC6 RCALL _write_cn
(0062) write_cn(cn_07,15);
1A3 E02F LDI R18,0xF
1A4 E101 LDI R16,0x11
1A5 E012 LDI R17,2
1A6 DFC2 RCALL _write_cn
(0063) write_cn(cn_08,23);
1A7 E127 LDI R18,0x17
1A8 E201 LDI R16,0x21
1A9 E012 LDI R17,2
1AA DFBE RCALL _write_cn
(0064) write_cn(cn_09,27);
1AB E12B LDI R18,0x1B
1AC E308 LDI R16,0x38
1AD E012 LDI R17,2
1AE DFBA RCALL _write_cn
(0065) write_cn(cn_10,14);
1AF E02E LDI R18,0xE
1B0 E504 LDI R16,0x54
1B1 E012 LDI R17,2
1B2 DFB6 RCALL _write_cn
(0066) write_cn(cn_11,17);
1B3 E121 LDI R18,0x11
1B4 E603 LDI R16,0x63
1B5 E012 LDI R17,2
1B6 DFB2 RCALL _write_cn
(0067) write_cn(cn_12,16);
1B7 E120 LDI R18,0x10
1B8 E705 LDI R16,0x75
1B9 E012 LDI R17,2
1BA DFAE RCALL _write_cn
(0068) write_cn(cn_13,38);
FILE: <library>
1BB E226 LDI R18,0x26
1BC E806 LDI R16,0x86
1BD E012 LDI R17,2
1BE DFAA RCALL _write_cn
1BF 9508 RET
pop_xgset00FC:
1C0 90A9 LD R10,Y+
1C1 90B9 LD R11,Y+
1C2 90C9 LD R12,Y+
1C3 90D9 LD R13,Y+
1C4 90E9 LD R14,Y+
1C5 90F9 LD R15,Y+
1C6 9508 RET
push_xgsetF0FC:
1C7 937A ST R23,-Y
1C8 936A ST R22,-Y
push_xgset30FC:
1C9 935A ST R21,-Y
1CA 934A ST R20,-Y
push_xgset00FC:
1CB 92FA ST R15,-Y
1CC 92EA ST R14,-Y
push_xgset003C:
1CD 92DA ST R13,-Y
1CE 92CA ST R12,-Y
1CF 92BA ST R11,-Y
1D0 92AA ST R10,-Y
1D1 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -