⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test-adc.lst

📁 ATmega16内部ADC的应用:ATmega16内部集成了8路10位逐次逼近型模数转换器
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -