📄 comunication.lst
字号:
__text_start:
__start:
0014 E5CF LDI R28,0x5F
0015 E0D4 LDI R29,4
0016 BFCD OUT 0x3D,R28
0017 BFDE OUT 0x3E,R29
0018 51C0 SUBI R28,0x10
0019 40D0 SBCI R29,0
001A EA0A LDI R16,0xAA
001B 8308 STD Y+0,R16
001C 2400 CLR R0
001D E6E2 LDI R30,0x62
001E E0F0 LDI R31,0
001F E010 LDI R17,0
0020 36E2 CPI R30,0x62
0021 07F1 CPC R31,R17
0022 F011 BEQ 0x0025
0023 9201 ST R0,Z+
0024 CFFB RJMP 0x0020
0025 8300 STD Z+0,R16
0026 E2E6 LDI R30,0x26
0027 E0F0 LDI R31,0
0028 E6A0 LDI R26,0x60
0029 E0B0 LDI R27,0
002A E010 LDI R17,0
002B 32E8 CPI R30,0x28
002C 07F1 CPC R31,R17
002D F021 BEQ 0x0032
002E 95C8 LPM
002F 9631 ADIW R30,1
0030 920D ST R0,X+
0031 CFF9 RJMP 0x002B
0032 D001 RCALL _main
_exit:
0033 CFFF RJMP _exit
FILE: G:\Mega8程序\测试MegaOSCCAL\Main.c
(0001) #include <macros.h>
(0002) #include<iom8v.h>
(0003)
(0004) extern unsigned char charInput;
(0005)
(0006) extern void uart_init(void);
(0007) extern int puts(char *s);
(0008) extern void putchar(unsigned char c);
(0009)
(0010) void delay_us(int time);
(0011) void delay_ms(unsigned int time);
(0012)
(0013) void main(void)
(0014) {
(0015) unsigned char cTemp;
(0016) unsigned char i;
(0017) for(cTemp=0x80;cTemp!=0xff;cTemp++)
_main:
i --> Y+1
cTemp --> R20
0034 E840 LDI R20,0x80
0035 C00F RJMP 0x0045
(0018) {
(0019) CLI();
0036 94F8 BCLR 7
(0020) OSCCAL=cTemp;
0037 BF41 OUT 0x31,R20
(0021) uart_init();
0038 D04E RCALL _uart_init
(0022) SEI();
0039 9478 BSET 7
(0023) delay_ms(10);
003A E00A LDI R16,0xA
003B E010 LDI R17,0
003C D013 RCALL _delay_ms
(0024) putchar('c');
003D E603 LDI R16,0x63
003E D030 RCALL _putchar
(0025) putchar('f');
003F E606 LDI R16,0x66
0040 D02E RCALL _putchar
(0026) delay_ms(500);
0041 EF04 LDI R16,0xF4
0042 E011 LDI R17,1
0043 D00C RCALL _delay_ms
0044 9543 INC R20
0045 3F4F CPI R20,0xFF
0046 F779 BNE 0x0036
0047 9508 RET
(0027) }
(0028) }
(0029)
(0030)
(0031) void delay_us(int time)
(0032) {
(0033) do
(0034) {
(0035) time--;
_delay_us:
time --> R16
0048 5001 SUBI R16,1
0049 4010 SBCI R17,0
(0036) }
(0037) while (time>1);
004A E081 LDI R24,1
004B E090 LDI R25,0
004C 1780 CP R24,R16
004D 0791 CPC R25,R17
004E F3CC BLT 0x0048
004F 9508 RET
_delay_ms:
time --> R20
0050 D04F RCALL push_gset1
0051 01A8 MOVW R20,R16
(0038) }
(0039) /* 毫秒级延时程序 */
(0040) void delay_ms(unsigned int time)
(0041) {
0052 C005 RJMP 0x0058
(0042) while(time!=0)
(0043) {
(0044) delay_us(1000);
0053 EE08 LDI R16,0xE8
0054 E013 LDI R17,3
0055 DFF2 RCALL _delay_us
(0045) time--;
0056 5041 SUBI R20,1
0057 4050 SBCI R21,0
0058 3040 CPI R20,0
0059 0745 CPC R20,R21
005A F7C1 BNE 0x0053
005B D047 RCALL pop_gset1
005C 9508 RET
_UartGet:
005D D059 RCALL push_lset
FILE: G:\Mega8程序\测试MegaOSCCAL\Uart.c
(0001) /*串口通信模块,使用之前,应该在Main 函数中对串口进行初始化,
(0002) 串口数据接收方式采用中断进行,振荡频率修正参数不在EEPROM的
(0003) 0x1ff0中,使用PonyProg可以测试得OSCCAL=0xA1*/
(0004) #include <iom8v.h>
(0005) #include <macros.h>
(0006)
(0007) extern void rom_write(unsigned int Address,unsigned char Data);
(0008) extern unsigned rom_read(unsigned int Address);
(0009)
(0010) #define fosc 8000000 //晶振8MHZ
(0011) #define baud 19200 //波特率
(0012) //使用中断方式接收UART的输入字符
(0013) #pragma interrupt_handler UartGet:12
(0014)
(0015) unsigned char charInput=0x00;
(0016) void UartGet(void)
(0017) {
(0018) static char cAddr=0;
(0019) charInput=UDR;
005E B02C IN R2,0x0C
005F 92200060 STS charInput,R2
(0020) if(charInput=='c')
0061 2D82 MOV R24,R2
0062 3683 CPI R24,0x63
0063 F449 BNE 0x006D
(0021) {
(0022) cAddr++;
0064 91800061 LDS R24,cAddr
0066 5F8F SUBI R24,0xFF
0067 93800061 STS cAddr,R24
(0023) rom_write(cAddr,OSCCAL);
0069 B721 IN R18,0x31
006A 2F08 MOV R16,R24
006B 2711 CLR R17
006C D023 RCALL _rom_write
(0024) }
006D D060 RCALL pop_lset
006E 9518 RETI
(0025) }
(0026)
(0027) void putchar(unsigned char c)/* 字符输出函数 */
(0028) {while (!(UCSRA&(1<<UDRE)));
_putchar:
c --> R16
006F 9B5D SBIS 0x0B,5
0070 CFFE RJMP _putchar
(0029) UDR=c;}
0071 B90C OUT 0x0C,R16
0072 9508 RET
(0030) unsigned char getchar(void)/* 字符输入函数-查询方式 */
(0031) {
(0032) while(!(UCSRA& (1<<RXC)));
_getchar:
0073 9B5F SBIS 0x0B,7
0074 CFFE RJMP _getchar
(0033) return UDR;
0075 B10C IN R16,0x0C
0076 9508 RET
_puts:
s --> R20
0077 D028 RCALL push_gset1
0078 01A8 MOVW R20,R16
(0034) }
(0035) /* 字符串输出函数 */
(0036) int puts(char *s)
(0037) {
0079 C005 RJMP 0x007F
(0038) while (*s)
(0039) {
(0040) putchar(*s);
007A 01FA MOVW R30,R20
007B 8100 LDD R16,Z+0
007C DFF2 RCALL _putchar
(0041) s++;
007D 5F4F SUBI R20,0xFF
007E 4F5F SBCI R21,0xFF
007F 01FA MOVW R30,R20
0080 8020 LDD R2,Z+0
0081 2022 TST R2
0082 F7B9 BNE 0x007A
(0042) }
(0043) return 1;
0083 E001 LDI R16,1
0084 E010 LDI R17,0
0085 D01D RCALL pop_gset1
0086 9508 RET
(0044) }
(0045) void uart_init(void)
(0046) {
(0047) UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);//允许接收中断、发送和接收
_uart_init:
0087 E988 LDI R24,0x98
0088 B98A OUT 0x0A,R24
(0048) /*UBRRL=(fosc/16/(baud+1))%256;
(0049) UBRRH=((fosc/16/(baud+1))/256)&0b01111111;*/
(0050) UBRRL=(fosc/16/baud-1)%256;
0089 E189 LDI R24,0x19
008A B989 OUT 0x09,R24
(0051) UBRRH=((fosc/16/baud-1)/256)&0b01111111;
008B 2422 CLR R2
008C BC20 OUT 0x20,R2
(0052) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
008D E886 LDI R24,0x86
008E BD80 OUT 0x20,R24
008F 9508 RET
FILE: G:\Mega8程序\测试MegaOSCCAL\RW_eeprom.c
(0001) #include <iom8v.h>
(0002) void rom_write(unsigned int Address,unsigned char Data)
(0003) {
(0004) while(EECR&(1<<EEWE));
_rom_write:
Data --> R18
Address --> R16
0090 99E1 SBIC 0x1C,1
0091 CFFE RJMP _rom_write
(0005) EEAR=Address;
0092 BB1F OUT 0x1F,R17
0093 BB0E OUT 0x1E,R16
(0006) EEDR=Data;
0094 BB2D OUT 0x1D,R18
(0007) EECR|=(1<<EEMWE);
0095 9AE2 SBI 0x1C,2
(0008) EECR|=(1<<EEWE);
0096 9AE1 SBI 0x1C,1
0097 9508 RET
(0009) }
(0010) unsigned rom_read(unsigned int Address)
(0011) {
(0012) while(EECR&(1<<EEWE));
_rom_read:
Address --> R16
0098 99E1 SBIC 0x1C,1
0099 CFFE RJMP _rom_read
(0013) EEAR=Address;
009A BB1F OUT 0x1F,R17
009B BB0E OUT 0x1E,R16
(0014) EECR|=(1<<EERE);
009C 9AE0 SBI 0x1C,0
(0015) return EEDR;
FILE: <library>
009D B30D IN R16,0x1D
009E 2711 CLR R17
009F 9508 RET
push_gset1:
00A0 935A ST R21,-Y
00A1 934A ST R20,-Y
00A2 9508 RET
pop_gset1:
00A3 E0E1 LDI R30,1
pop:
00A4 9149 LD R20,Y+
00A5 9159 LD R21,Y+
00A6 FDE0 SBRC R30,0
00A7 9508 RET
00A8 9169 LD R22,Y+
00A9 9179 LD R23,Y+
00AA FDE1 SBRC R30,1
00AB 9508 RET
00AC 90A9 LD R10,Y+
00AD 90B9 LD R11,Y+
00AE FDE2 SBRC R30,2
00AF 9508 RET
00B0 90C9 LD R12,Y+
00B1 90D9 LD R13,Y+
00B2 FDE3 SBRC R30,3
00B3 9508 RET
00B4 90E9 LD R14,Y+
00B5 90F9 LD R15,Y+
00B6 9508 RET
push_lset:
00B7 93FA ST R31,-Y
00B8 93EA ST R30,-Y
00B9 93BA ST R27,-Y
00BA 93AA ST R26,-Y
00BB 939A ST R25,-Y
00BC 938A ST R24,-Y
00BD 933A ST R19,-Y
00BE 932A ST R18,-Y
00BF 931A ST R17,-Y
00C0 930A ST R16,-Y
00C1 929A ST R9,-Y
00C2 928A ST R8,-Y
00C3 927A ST R7,-Y
00C4 926A ST R6,-Y
00C5 925A ST R5,-Y
00C6 924A ST R4,-Y
00C7 923A ST R3,-Y
00C8 922A ST R2,-Y
00C9 921A ST R1,-Y
00CA 920A ST R0,-Y
00CB B60F IN R0,0x3F
00CC 920A ST R0,-Y
00CD 9508 RET
pop_lset:
00CE 9009 LD R0,Y+
00CF BE0F OUT 0x3F,R0
00D0 9009 LD R0,Y+
00D1 9019 LD R1,Y+
00D2 9029 LD R2,Y+
00D3 9039 LD R3,Y+
00D4 9049 LD R4,Y+
00D5 9059 LD R5,Y+
00D6 9069 LD R6,Y+
00D7 9079 LD R7,Y+
00D8 9089 LD R8,Y+
00D9 9099 LD R9,Y+
00DA 9109 LD R16,Y+
00DB 9119 LD R17,Y+
00DC 9129 LD R18,Y+
00DD 9139 LD R19,Y+
00DE 9189 LD R24,Y+
00DF 9199 LD R25,Y+
00E0 91A9 LD R26,Y+
00E1 91B9 LD R27,Y+
00E2 91E9 LD R30,Y+
00E3 91F9 LD R31,Y+
00E4 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -