📄 m16.lst
字号:
__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 + -