📄 test-adc.lst
字号:
__start:
__text_start:
0035 E5CF LDI R28,0x5F
0036 E0D4 LDI R29,4
0037 BFCD OUT 0x3D,R28
0038 BFDE OUT 0x3E,R29
0039 51C0 SUBI R28,0x10
003A 40D0 SBCI R29,0
003B EA0A LDI R16,0xAA
003C 8308 STD Y+0,R16
003D 2400 CLR R0
003E E7E5 LDI R30,0x75
003F E0F0 LDI R31,0
0040 E010 LDI R17,0
0041 37ED CPI R30,0x7D
0042 07F1 CPC R31,R17
0043 F011 BEQ 0x0046
0044 9201 ST R0,Z+
0045 CFFB RJMP 0x0041
0046 8300 STD Z+0,R16
0047 E5E4 LDI R30,0x54
0048 E0F0 LDI R31,0
0049 E6A0 LDI R26,0x60
004A E0B0 LDI R27,0
004B E010 LDI R17,0
004C 36E9 CPI R30,0x69
004D 07F1 CPC R31,R17
004E F021 BEQ 0x0053
004F 95C8 LPM
0050 9631 ADIW R30,1
0051 920D ST R0,X+
0052 CFF9 RJMP 0x004C
0053 940E0259 CALL _main
_exit:
0055 CFFF RJMP _exit
FILE: F:\radio\第十一篇\test-adc\usart.c
(0001) #include <iom16v.h>
(0002) #include "delay.h"
(0003) #define fosc 8000000 //晶振8MHZ
(0004) #define baud 19200 //波特率
(0005) /* 字符输出函数 */
(0006) void putchar(unsigned char coutput)
(0007) {
(0008) while (!(UCSRA&(1<<UDRE)));
_putchar:
coutput --> R16
0056 9B5D SBIS 0x0B,5
0057 CFFE RJMP _putchar
(0009) UDR=coutput;
0058 B90C OUT 0x0C,R16
0059 9508 RET
(0010) }
(0011) /* 字符输入函数 */
(0012) unsigned char getchar(void)
(0013) {
(0014) while(!(UCSRA& (1<<RXC)));
_getchar:
005A 9B5F SBIS 0x0B,7
005B CFFE RJMP _getchar
(0015) return UDR;
005C B10C IN R16,0x0C
005D 9508 RET
_puts:
s --> R20
005E 940E02FD CALL push_gset1
0060 01A8 MOVW R20,R16
(0016) }
(0017) /* 字符串输出函数 */
(0018) int puts(char *s)
(0019) {
0061 C005 RJMP 0x0067
(0020) while (*s)
(0021) {
(0022) putchar(*s);
0062 01FA MOVW R30,R20
0063 8100 LDD R16,Z+0
0064 DFF1 RCALL _putchar
(0023) s++;
0065 5F4F SUBI R20,0xFF
0066 4F5F SBCI R21,0xFF
0067 01FA MOVW R30,R20
0068 8020 LDD R2,Z+0
0069 2022 TST R2
006A F7B9 BNE 0x0062
(0024) }
(0025) putchar(0x0d);
006B E00D LDI R16,0xD
006C DFE9 RCALL _putchar
(0026) putchar(0x0a);//回车换行
006D E00A LDI R16,0xA
006E DFE7 RCALL _putchar
(0027) return 1;
006F E001 LDI R16,1
0070 E010 LDI R17,0
0071 940E0300 CALL pop_gset1
0073 9508 RET
_putstr:
s --> R20
0074 940E02FD CALL push_gset1
0076 01A8 MOVW R20,R16
(0028) }
(0029) /* 不含回车换行的字符串输出函数 */
(0030) void putstr(char *s)
(0031) {
0077 C005 RJMP 0x007D
(0032) while (*s)
(0033) {
(0034) putchar(*s);
0078 01FA MOVW R30,R20
0079 8100 LDD R16,Z+0
007A DFDB RCALL _putchar
(0035) s++;
007B 5F4F SUBI R20,0xFF
007C 4F5F SBCI R21,0xFF
007D 01FA MOVW R30,R20
007E 8020 LDD R2,Z+0
007F 2022 TST R2
0080 F7B9 BNE 0x0078
0081 940E0300 CALL pop_gset1
0083 9508 RET
(0036) }
(0037) }
(0038) /* UART初始化 */
(0039) void uart_init(void)
(0040) {
(0041) UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
_uart_init:
0084 E188 LDI R24,0x18
0085 B98A OUT 0x0A,R24
(0042) UBRRL=(fosc/16/(baud+1))%256;
0086 E18A LDI R24,0x1A
0087 B989 OUT 0x09,R24
(0043) UBRRH=(fosc/16/(baud+1))/256;
0088 2422 CLR R2
0089 BC20 OUT 0x20,R2
(0044) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
008A E886 LDI R24,0x86
008B BD80 OUT 0x20,R24
008C 9508 RET
FILE: F:\radio\第十一篇\test-adc\lcd.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include "delay.h"
(0004) #define delay125ns NOP()
(0005) #define delay250ns NOP();NOP()
(0006) #define delay500ns NOP();NOP();NOP();NOP()
(0007) //;NOP()
(0008)
(0009) #define delay1us NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP()
(0010) #define delay2us delay1us;delay1us
(0011) #define RS PD4
(0012) #define RW PD5
(0013) #define EN PD7
(0014) #define DataLcd PORTB
(0015) #define DataLcdIn PINB
(0016) #define DataOut DDRB = 0XFF
(0017) #define DataIn DDRB = 0
(0018)
(0019) #define RS_0 PORTD &=~ (1<<RS)
(0020) #define RS_1 PORTD |= (1<<RS)
(0021) #define RW_0 PORTD &=~ (1<<RW)
(0022) #define RW_1 PORTD |= (1<<RW)
(0023) #define EN_0 PORTD &=~ (1<<EN)
(0024) #define EN_1 PORTD |= (1<<EN)
(0025) /*时钟为8MHZ* /
(0026) void delay_1us(void)
(0027) {
(0028) asm("nop");
(0029) }
(0030) void delay_us(unsigned int itimes)
(0031) {
(0032) unsigned int itemp;
(0033) for (itemp=0;itemp<itimes;itemp++)
(0034) {
(0035) delay_1us();
(0036) }
(0037) }
(0038) /**/
(0039) void ClearLcd(void)
(0040) {
(0041) EN_0;
_ClearLcd:
008D 9897 CBI 0x12,7
(0042) RS_0;
008E 9894 CBI 0x12,4
(0043) RW_0;
008F 9895 CBI 0x12,5
(0044) DataOut;
0090 EF8F LDI R24,0xFF
0091 BB87 OUT 0x17,R24
(0045) DataLcd = 1;
0092 E081 LDI R24,1
0093 BB88 OUT 0x18,R24
(0046) delay250ns;
0094 0000 NOP
0095 0000 NOP
(0047) EN_1;
0096 9A97 SBI 0x12,7
(0048) delay500ns;
0097 0000 NOP
0098 0000 NOP
0099 0000 NOP
009A 0000 NOP
(0049) EN_0;
009B 9897 CBI 0x12,7
(0050) delay125ns;
009C 0000 NOP
(0051) RS_1;
009D 9A94 SBI 0x12,4
(0052) RW_1;
009E 9A95 SBI 0x12,5
009F 9508 RET
(0053) }
(0054) /**/
(0055) void home(void)
(0056) {
(0057) RS_0;
_home:
00A0 9894 CBI 0x12,4
(0058) RW_0;
00A1 9895 CBI 0x12,5
(0059) DataLcd = 2;
00A2 E082 LDI R24,2
00A3 BB88 OUT 0x18,R24
(0060) delay250ns;
00A4 0000 NOP
00A5 0000 NOP
(0061) EN_1;
00A6 9A97 SBI 0x12,7
(0062) delay500ns;
00A7 0000 NOP
00A8 0000 NOP
00A9 0000 NOP
00AA 0000 NOP
(0063) EN_0;
00AB 9897 CBI 0x12,7
(0064) delay125ns;
00AC 0000 NOP
(0065) RS_1;
00AD 9A94 SBI 0x12,4
(0066) RW_1;
00AE 9A95 SBI 0x12,5
00AF 9508 RET
(0067) }
(0068) void InputSet(void)
(0069) {
(0070) RS_0;
_InputSet:
00B0 9894 CBI 0x12,4
(0071) RW_0;
00B1 9895 CBI 0x12,5
(0072) DataLcd = 6; //
00B2 E086 LDI R24,6
00B3 BB88 OUT 0x18,R24
(0073) delay250ns;
00B4 0000 NOP
00B5 0000 NOP
(0074) EN_1;
00B6 9A97 SBI 0x12,7
(0075) delay500ns;
00B7 0000 NOP
00B8 0000 NOP
00B9 0000 NOP
00BA 0000 NOP
(0076) EN_0;
00BB 9897 CBI 0x12,7
(0077) delay125ns;
00BC 0000 NOP
(0078) RS_1;
00BD 9A94 SBI 0x12,4
(0079) RW_1;
00BE 9A95 SBI 0x12,5
00BF 9508 RET
(0080) }
(0081) void VisionSet(void)
(0082) {
(0083) EN_0;
_VisionSet:
00C0 9897 CBI 0x12,7
(0084) RS_0;
00C1 9894 CBI 0x12,4
(0085) RW_0;
00C2 9895 CBI 0x12,5
(0086) DataLcd = 0x0f; //设置D=1,C=1,B=1
00C3 E08F LDI R24,0xF
00C4 BB88 OUT 0x18,R24
(0087) delay250ns;
00C5 0000 NOP
00C6 0000 NOP
(0088) EN_1;
00C7 9A97 SBI 0x12,7
(0089) delay500ns;
00C8 0000 NOP
00C9 0000 NOP
00CA 0000 NOP
00CB 0000 NOP
(0090) EN_0;
00CC 9897 CBI 0x12,7
(0091) delay125ns;
00CD 0000 NOP
(0092) RS_1;
00CE 9A94 SBI 0x12,4
(0093) RW_1;
00CF 9A95 SBI 0x12,5
00D0 9508 RET
(0094) }
(0095) void FunctionSet(void)
(0096) {
(0097) DataOut;
_FunctionSet:
00D1 EF8F LDI R24,0xFF
00D2 BB87 OUT 0x17,R24
(0098) EN_0;
00D3 9897 CBI 0x12,7
(0099) RS_0;
00D4 9894 CBI 0x12,4
(0100) RW_0;
00D5 9895 CBI 0x12,5
(0101) DataLcd = 0x38; //设置DL=1,N=1,F=0
00D6 E388 LDI R24,0x38
00D7 BB88 OUT 0x18,R24
(0102) delay250ns; //地址建立时间,最小140ns
00D8 0000 NOP
00D9 0000 NOP
(0103) EN_1;
00DA 9A97 SBI 0x12,7
(0104) delay500ns; //脉冲宽度,最小450ns
00DB 0000 NOP
00DC 0000 NOP
00DD 0000 NOP
00DE 0000 NOP
(0105) EN_0;
00DF 9897 CBI 0x12,7
(0106) delay125ns; //地址保持时间,最小10ns
00E0 0000 NOP
(0107) RS_1;
00E1 9A94 SBI 0x12,4
(0108) RW_1;
00E2 9A95 SBI 0x12,5
00E3 9508 RET
(0109) }
(0110) void CgramSet(void)
(0111) {
_CgramSet:
00E4 9508 RET
(0112)
(0113) }
(0114) void DdramSet(unsigned char addr)
(0115) {
(0116) EN_0;
_DdramSet:
addr --> R16
00E5 9897 CBI 0x12,7
(0117) RS_0;
00E6 9894 CBI 0x12,4
(0118) RW_0;
00E7 9895 CBI 0x12,5
(0119) DataLcd = (0x80+addr); //
00E8 2F80 MOV R24,R16
00E9 5880 SUBI R24,0x80
00EA BB88 OUT 0x18,R24
(0120) delay250ns;
00EB 0000 NOP
00EC 0000 NOP
(0121) EN_1;
00ED 9A97 SBI 0x12,7
(0122) delay500ns;
00EE 0000 NOP
00EF 0000 NOP
00F0 0000 NOP
00F1 0000 NOP
(0123) EN_0;
00F2 9897 CBI 0x12,7
(0124) delay125ns;
00F3 0000 NOP
(0125) RS_1;
00F4 9A94 SBI 0x12,4
(0126) RW_1;
00F5 9A95 SBI 0x12,5
00F6 9508 RET
(0127) }
(0128) unsigned char BFRead(void)
(0129) {
(0130) unsigned char bf;
(0131) RS_0;
_BFRead:
bf --> R16
00F7 9894 CBI 0x12,4
(0132) RW_1;
00F8 9A95 SBI 0x12,5
(0133) delay250ns;
00F9 0000 NOP
00FA 0000 NOP
(0134) EN_1;
00FB 9A97 SBI 0x12,7
(0135) delay500ns;
00FC 0000 NOP
00FD 0000 NOP
00FE 0000 NOP
00FF 0000 NOP
(0136) DataIn;
0100 2422 CLR R2
0101 BA27 OUT 0x17,R2
(0137) bf = DataLcdIn;
0102 B306 IN R16,0x16
(0138) EN_0;
0103 9897 CBI 0x12,7
(0139) delay125ns;
0104 0000 NOP
(0140) RS_1;
0105 9A94 SBI 0x12,4
(0141) RW_0;
0106 9895 CBI 0x12,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -