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

📄 m16.lst

📁 M16-ISP串口通讯,新手可以参考本例子进行通讯实验
💻 LST
📖 第 1 页 / 共 4 页
字号:
__start:
__text_start:
    0034 E5CF      LDI	R28,0x5F
    0035 E0D4      LDI	R29,4
    0036 BFCD      OUT	0x3D,R28
    0037 BFDE      OUT	0x3E,R29
    0038 51C0      SUBI	R28,0x10
    0039 40D0      SBCI	R29,0
    003A EA0A      LDI	R16,0xAA
    003B 8308      STD	Y+0,R16
    003C 2400      CLR	R0
    003D E6E0      LDI	R30,0x60
    003E E0F0      LDI	R31,0
    003F E010      LDI	R17,0
    0040 36E0      CPI	R30,0x60
    0041 07F1      CPC	R31,R17
    0042 F011      BEQ	0x0045
    0043 9201      ST	R0,Z+
    0044 CFFB      RJMP	0x0040
    0045 8300      STD	Z+0,R16
    0046 E6E8      LDI	R30,0x68
    0047 E0F0      LDI	R31,0
    0048 E6A0      LDI	R26,0x60
    0049 E0B0      LDI	R27,0
    004A E010      LDI	R17,0
    004B 36E8      CPI	R30,0x68
    004C 07F1      CPC	R31,R17
    004D F021      BEQ	0x0052
    004E 95C8      LPM
    004F 9631      ADIW	R30,1
    0050 920D      ST	R0,X+
    0051 CFF9      RJMP	0x004B
    0052 940E03BD  CALL	_main
_exit:
    0054 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\调试成功\M16-ISP串口通讯\..\includeH\Init.h
(0001) /****************************************************************
(0002) 调用的子程序及函数库包括
(0003) void BuzzerLongON(void)
(0004) void BuzzerShortON(void)
(0005) void Port_init(void)
(0006) void WDT_ON(void)
(0007) void WDT_OFF(void)  ///关看门狗
(0008) void Delay(void)//延时
(0009) void DelayWDR(void)//看门狗打开的延时
(0010) 
(0011) 
(0012) void delay_nms(unsigned int n)//延时n毫秒
(0013) void delay_1ms(void)//1ms延时函数
(0014) 
(0015) void ADC_Init(void)ADC初始设置
(0016) #pragma interrupt_handler adc_isr:iv_ADC     //ADC完成中断
(0017) void adc_isr(void)
(0018) 
(0019) ****************************************************************/
(0020) #define uchar unsigned char
(0021) #define uint unsigned int
(0022) 
(0023) #define Red_LedON PORTA&=(~(1<<PA5))    
(0024) #define Red_LedOFF PORTA|=(1<<PA5)      
(0025) #define Green_LedON PORTA&=(~(1<<PA4))
(0026) #define Green_LedOFF PORTA|=(1<<PA4)
(0027) 
(0028) #define D01ON PORTB&=(~(1<<PB3))    //打开LED D1   与的方式置0
(0029) #define D01OFF PORTB|=(1<<PB3)      //关闭LED D1   或的方式置1
(0030) #define D02ON PORTB&=(~(1<<PB2))
(0031) #define D02OFF PORTB|=(1<<PB2)
(0032) #define D03ON PORTB&=(~(1<<PB1))
(0033) #define D03OFF PORTB|=(1<<PB1)
(0034) #define D04ON PORTB&=(~(1<<PB0))
(0035) #define D04OFF PORTB|=(1<<PB0)
(0036) 
(0037) #define LED1 D01ON;D02OFF;D03OFF;D04OFF;delay_nms(100);
(0038) #define LED12 D01ON;D02ON;D03OFF;D04OFF;delay_nms(100);
(0039) #define LED14 D01ON;D02OFF;D03ON;D04OFF;delay_nms(100);
(0040) #define LED13 D01ON;D02OFF;D03OFF;D04ON;delay_nms(100);
(0041) 
(0042) #define LED2 D02ON;D01OFF;D03OFF;D04OFF;delay_nms(100);
(0043) #define LED21 D02ON;D01ON;D03OFF;D04OFF;delay_nms(100);
(0044) #define LED24 D02ON;D01OFF;D03ON;D04OFF;delay_nms(100);
(0045) #define LED23 D02ON;D01OFF;D03OFF;D04ON;delay_nms(100);
(0046) 
(0047) #define LED4 D03ON;D02OFF;D01OFF;D04OFF;delay_nms(100);
(0048) #define LED41 D03ON;D02OFF;D01ON;D04OFF;delay_nms(100);
(0049) #define LED42 D03ON;D02ON;D01OFF;D04OFF;delay_nms(100);
(0050) #define LED43 D03ON;D02OFF;D01OFF;D04ON;delay_nms(100);
(0051) 
(0052) #define LED3 D04ON;D02OFF;D03OFF;D01OFF;delay_nms(100);
(0053) #define LED31 D04ON;D02OFF;D03OFF;D01ON;delay_nms(100);
(0054) #define LED32 D04ON;D02ON;D03OFF;D01OFF;delay_nms(100);
(0055) #define LED34 D04ON;D02OFF;D03ON;D01OFF;delay_nms(100);
(0056) 
(0057) #define LED44 D01ON;D02ON;D03ON;D04ON;delay_nms(100);     ///全亮
(0058) #define LED00 D01OFF;D02OFF;D03OFF;D04OFF;delay_nms(100); //全灭
(0059) 
(0060) 
(0061) 
(0062) #define BuzzerON  PORTC|=(1<<PC6)
(0063) #define BuzzerOFF PORTC&=(~(1<<PC6))
(0064) //比#define BuzzerOFF PORTC=0x00全修改方式相对好,仅修改个别位
(0065) #define BuzzerLongON  BuzzerON;Delay();Delay();Delay();BuzzerOFF;
(0066) #define BuzzerShortON BuzzerON;Delay();BuzzerOFF;
(0067) 
(0068) extern void send_byte(uchar x);
(0069) extern void disp_led(uchar buffer,uchar control);
(0070) extern void delay_1ms(void); 
(0071) extern void delay_nms(unsigned int n);
(0072) extern void Disp_led(uchar chanel);
(0073) extern void LED_Run(void);
(0074) extern void USART_Init_M16( uchar Fosc,uchar baud );
(0075) extern void LED_Texting_ISP(void);
(0076) extern void LED_Wait_ISP(void);
(0077) extern void USART_InitM1681( unsigned int baud );
(0078) extern void USART_InitM1682( unsigned int baud );
(0079) 
(0080) /******************************************************************************
(0081) 功能:初始化端口
(0082) 函数:void Port_init(void)
(0083) 返回值:无
(0084) 备注:
(0085) 
(0086) ******************************************************************************/
(0087) void Port_init(void)
(0088) {PORTA = 0x00;DDRA  = 0x00;  PORTB = 0xff;DDRB  = 0xff;
_Port_init:
    0055 2422      CLR	R2
    0056 BA2B      OUT	0x1B,R2
    0057 BA2A      OUT	0x1A,R2
    0058 EF8F      LDI	R24,0xFF
    0059 BB88      OUT	0x18,R24
    005A BB87      OUT	0x17,R24
(0089)  PORTC = 0x00;DDRC  = 0xff;  PORTD = 0x00;DDRD  = 0x00;
    005B BA25      OUT	0x15,R2
    005C BB84      OUT	0x14,R24
    005D BA22      OUT	0x12,R2
    005E BA21      OUT	0x11,R2
    005F 9508      RET
(0090) }
(0091) //只有DDRxn=0即管脚定义为输入状态,并且PORTxn=1,而且UPD设置为0时,上拉电阻才生效。
(0092) 
(0093) 
(0094) 
(0095) /******************************************************************************
(0096) 功能:看门狗打开
(0097) 函数:void WDT_ON(void)
(0098) 返回值:无
(0099) 备注:
(0100) 
(0101) 
(0102) ******************************************************************************/
(0103) void WDT_ON(void)
(0104)  {
(0105)    WDR(); //this prevents a timout on enabling
_WDT_ON:
    0060 95A8      WDR
(0106)    WDTCR|=(1<<WDTOE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);//WDTCR = 0x1F; //特别注意这一条不是ICC生成的,是后来加上的。
    0061 B581      IN	R24,0x21
    0062 618F      ORI	R24,0x1F
    0063 BD81      OUT	0x21,R24
(0107)    WDTCR&=(~(1<<WDTOE))|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0);//WDTCR = 0x0F; //WATCHDOG ENABLED - dont forget to issue WDRs
    0064 B581      IN	R24,0x21
    0065 7E8F      ANDI	R24,0xEF
    0066 BD81      OUT	0x21,R24
    0067 9508      RET
(0108)  }
(0109) 
(0110)  
(0111)  
(0112)  
(0113) /******************************************************************************
(0114) 功能:关看门狗
(0115) 函数:void WDT_OFF(void)
(0116) 返回值:无
(0117) 备注:
(0118) 
(0119) 
(0120) 
(0121) ******************************************************************************/ 
(0122) void WDT_OFF(void)  ///关看门狗
(0123) {
(0124)   WDR();
_WDT_OFF:
    0068 95A8      WDR
(0125)   WDTCR|=(1<<WDTOE)|(1<<WDE);
    0069 B581      IN	R24,0x21
    006A 6188      ORI	R24,0x18
    006B BD81      OUT	0x21,R24
(0126)   WDTCR=0x00;
    006C 2422      CLR	R2
    006D BC21      OUT	0x21,R2
    006E 9508      RET
(0127) }
(0128) 
(0129) 
(0130) 
(0131) 
(0132) /******************************************************************************
(0133) 功能:看门狗打开的延时
(0134) 函数:void DelayWDR(void)
(0135) 返回值:无
(0136) 备注:
(0137) 
(0138) 
(0139) 
(0140) ******************************************************************************/
(0141) void DelayWDR(void)//看门狗打开的延时
(0142) {
(0143)    unsigned char i,j;
(0144)    for(i=250;i>0;i--){ for(j=250;j>0;j--) asm("nop");
_DelayWDR:
  i                    --> R16
  j                    --> R18
    006F EF0A      LDI	R16,0xFA
    0070 C009      RJMP	0x007A
    0071 EF2A      LDI	R18,0xFA
    0072 C002      RJMP	0x0075
    0073 0000      NOP
    0074 952A      DEC	R18
    0075 2422      CLR	R2
    0076 1622      CP	R2,R18
    0077 F3D8      BCS	0x0073
(0145)    WDR(); 
    0078 95A8      WDR
    0079 950A      DEC	R16
    007A 2422      CLR	R2
    007B 1620      CP	R2,R16
    007C F3A0      BCS	0x0071
    007D 9508      RET
(0146)    }
(0147) }
(0148) 
(0149) 
(0150) 
(0151) /******************************************************************************
(0152) 功能:延时
(0153) 函数:void Delay(void)
(0154) 返回值:无
(0155) 备注:
(0156) 
(0157) 
(0158) 
(0159) ******************************************************************************/
(0160) void Delay(void)//延时
(0161) {  unsigned char i,j;
(0162)    for(i=250;i>0;i--){ for(j=250;j>0;j--) asm("nop");
_Delay:
  i                    --> R16
  j                    --> R18
    007E EF0A      LDI	R16,0xFA
    007F C009      RJMP	0x0089
    0080 EF2A      LDI	R18,0xFA
    0081 C002      RJMP	0x0084
    0082 0000      NOP
    0083 952A      DEC	R18
    0084 2422      CLR	R2
    0085 1622      CP	R2,R18
    0086 F3D8      BCS	0x0082
(0163)    WDR(); 
    0087 95A8      WDR
    0088 950A      DEC	R16
    0089 2422      CLR	R2
    008A 1620      CP	R2,R16
    008B F3A0      BCS	0x0080
    008C 9508      RET
(0164)    }
(0165) }
(0166) 
(0167) 
(0168) 
(0169) /******************************************************************************
(0170) 功能:ADC初始设置
(0171) 函数:void ADC_Init(void)
(0172) 返回值:无
(0173) 备注:
(0174) 
(0175) 
(0176) 
(0177) ******************************************************************************/
(0178) void ADC_Init(void)
(0179) {   CLI();
_ADC_Init:
    008D 94F8      BCLR	7
(0180) 	ADCSRA = 0x00; 
    008E 2422      CLR	R2
    008F B826      OUT	0x06,R2
(0181)     ADMUX = (1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
    0090 EC83      LDI	R24,0xC3
    0091 B987      OUT	0x07,R24
(0182)     ADCSRA= (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
    0092 EC8E      LDI	R24,0xCE
    0093 B986      OUT	0x06,R24
(0183) 	SEI();
    0094 9478      BSET	7
    0095 9508      RET
(0184) }
(0185) 
(0186) /******************************************************************************
(0187) 功能://ADC完成中断
(0188) 函数:void adc_isr(void)
(0189) 返回值:无
(0190) 备注:
(0191) 
(0192) 
(0193) 
(0194) ******************************************************************************/
(0195) /*
(0196) #pragma interrupt_handler adc_isr:iv_ADC     
(0197) void adc_isr(void)
(0198) {
(0199)  ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
(0200)  ADCSRA|=(1<<ADSC);//启动AD转换
(0201) }
(0202) 
(0203) #pragma interrupt_handler adc_isr:15     
(0204) void adc_isr(void)
(0205) {
(0206)  ADMUX =(1<<REFS0)|(1<<REFS1)|(1<<MUX1)|(1<<MUX0);
(0207)  ADCSRA|=(1<<ADSC);//启动AD转换
(0208) }
(0209) */
(0210) 
(0211) /******************************************************************************
(0212) 功能:1ms延时函数
(0213) 函数:void delay_1ms(void)
(0214) 返回值:无
(0215) 备注:
(0216) 
(0217) 
(0218) 
(0219) ******************************************************************************/
(0220) void delay_1ms(void)//1ms延时函数
(0221) {
(0222)   unsigned int i;
(0223)   for (i=0;i<150;i++)
_delay_1ms:
  i                    --> R16
    0096 2700      CLR	R16
    0097 2711      CLR	R17
    0098 C003      RJMP	0x009C
(0224)   WDR();  
    0099 95A8      WDR
    009A 5F0F      SUBI	R16,0xFF
    009B 4F1F      SBCI	R17,0xFF
    009C 3906      CPI	R16,0x96
    009D E0E0      LDI	R30,0
    009E 071E      CPC	R17,R30
    009F F3C8      BCS	0x0099
    00A0 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    00A1 940E0468  CALL	push_gset2
    00A3 01B8      MOVW	R22,R16
(0225) }
(0226) 
(0227) 
(0228) /******************************************************************************
(0229) 功能:延时n毫秒
(0230) 函数:void delay_nms(unsigned int n)
(0231) 返回值:无
(0232) 备注:
(0233) 
(0234) 
(0235) 
(0236) ******************************************************************************/
(0237) void delay_nms(unsigned int n)//延时n毫秒
(0238) {
(0239)   unsigned int i;
(0240)   for (i=0;i<n;i++)//执行n次1毫秒延时
    00A4 2744      CLR	R20
    00A5 2755      CLR	R21
    00A6 C003      RJMP	0x00AA
(0241)       {
(0242) 	     delay_1ms(); 
    00A7 DFEE      RCALL	_delay_1ms
    00A8 5F4F      SUBI	R20,0xFF
    00A9 4F5F      SBCI	R21,0xFF
    00AA 1746      CP	R20,R22
    00AB 0757      CPC	R21,R23
    00AC F3D0      BCS	0x00A7
(0243)       }
(0244)   WDR(); 
    00AD 95A8      WDR
    00AE 940E045C  CALL	pop_gset2
    00B0 9508      RET
_send_byte:
  i                    --> R20
  x                    --> R22
    00B1 940E0468  CALL	push_gset2
    00B3 2F60      MOV	R22,R16
(0245) }
(0246) 
(0247) 
(0248) 
(0249) /******************************************************************************
(0250) 功能:模拟串口发送数据
(0251) 函数:void send_byte(uchar x)
(0252) 返回值:无
(0253) 备注:
(0254) 
(0255) 
(0256) 
(0257) ******************************************************************************/
(0258) void send_byte(uchar x)
(0259) {
(0260) 	uchar i;
(0261)  	for(i=0;i<8;i++)
    00B4 2744      CLR	R20
    00B5 C012      RJMP	0x00C8
(0262)  	{
(0263)  		PORTC=0<<5;
    00B6 2422      CLR	R2
    00B7 BA25      OUT	0x15,R2
(0264) 		if((x&(1<<(7-i))))
    00B8 E017      LDI	R17,7
    00B9 1B14      SUB	R17,R20
    00BA E001      LDI	R16,1
    00BB 940E0481  CALL	lsl8
    00BD 2E26      MOV	R2,R22
    00BE 2220      AND	R2,R16
    00BF F019      BEQ	0x00C3
(0265) 		PORTC=1<<4;
    00C0 E180      LDI	R24,0x10
    00C1 BB85      OUT	0x15,R24
    00C2 C002      RJMP	0x00C5
(0266) 		else
(0267) 		PORTC=0<<4;
    00C3 2422      CLR	R2
    00C4 BA25      OUT	0x15,R2
(0268) 		PORTC=1<<5;
    00C5 E280      LDI	R24,0x20
    00C6 BB85      OUT	0x15,R24
    00C7 9543      INC	R20
    00C8 3048      CPI	R20,0x8
    00C9 F360      BCS	0x00B6
    00CA 940E045C  CALL	pop_gset2
    00CC 9508      RET
(0269) 	}
(0270) }
(0271) 
(0272) /******************************************************************************
(0273) 功能:ADC转换
(0274) 函数:uint ADCConvert_3()
(0275) 返回值:无
(0276) 备注:
(0277) 
(0278) 
(0279) 
(0280) ******************************************************************************/
(0281) uint ADCConvert_3(void)
(0282) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -