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

📄 m16.lst

📁 M16-ISP串口通讯,新手可以参考本例子进行通讯实验
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0238 DE68      RCALL	_delay_nms
    0239 98C0      CBI	0x18,0
    023A 9AC2      SBI	0x18,2
    023B 9AC1      SBI	0x18,1
    023C 9AC3      SBI	0x18,3
    023D E604      LDI	R16,0x64
    023E E010      LDI	R17,0
    023F DE61      RCALL	_delay_nms
    0240 98C0      CBI	0x18,0
    0241 98C2      CBI	0x18,2
    0242 9AC1      SBI	0x18,1
    0243 9AC3      SBI	0x18,3
    0244 E604      LDI	R16,0x64
    0245 E010      LDI	R17,0
    0246 DE5A      RCALL	_delay_nms
    0247 98C0      CBI	0x18,0
    0248 9AC2      SBI	0x18,2
    0249 9AC1      SBI	0x18,1
    024A 9AC3      SBI	0x18,3
    024B E604      LDI	R16,0x64
    024C E010      LDI	R17,0
    024D DE53      RCALL	_delay_nms
    024E 98C0      CBI	0x18,0
    024F 9AC2      SBI	0x18,2
    0250 98C1      CBI	0x18,1
    0251 9AC3      SBI	0x18,3
    0252 E604      LDI	R16,0x64
    0253 E010      LDI	R17,0
    0254 DE4C      RCALL	_delay_nms
    0255 98C1      CBI	0x18,1
    0256 9AC2      SBI	0x18,2
    0257 9AC3      SBI	0x18,3
    0258 9AC0      SBI	0x18,0
    0259 E604      LDI	R16,0x64
    025A E010      LDI	R17,0
    025B DE45      RCALL	_delay_nms
    025C 98C1      CBI	0x18,1
    025D 9AC2      SBI	0x18,2
    025E 9AC3      SBI	0x18,3
    025F 98C0      CBI	0x18,0
    0260 E604      LDI	R16,0x64
    0261 E010      LDI	R17,0
    0262 DE3E      RCALL	_delay_nms
    0263 98C1      CBI	0x18,1
    0264 9AC2      SBI	0x18,2
    0265 9AC3      SBI	0x18,3
    0266 9AC0      SBI	0x18,0
    0267 E604      LDI	R16,0x64
    0268 E010      LDI	R17,0
    0269 DE37      RCALL	_delay_nms
    026A 98C1      CBI	0x18,1
    026B 9AC2      SBI	0x18,2
    026C 98C3      CBI	0x18,3
    026D 9AC0      SBI	0x18,0
    026E E604      LDI	R16,0x64
    026F E010      LDI	R17,0
    0270 DE30      RCALL	_delay_nms
    0271 98C3      CBI	0x18,3
    0272 9AC2      SBI	0x18,2
    0273 9AC1      SBI	0x18,1
    0274 9AC0      SBI	0x18,0
    0275 E604      LDI	R16,0x64
    0276 E010      LDI	R17,0
    0277 DE29      RCALL	_delay_nms
    0278 98C3      CBI	0x18,3
    0279 9AC2      SBI	0x18,2
    027A 98C1      CBI	0x18,1
    027B 9AC0      SBI	0x18,0
    027C E604      LDI	R16,0x64
    027D E010      LDI	R17,0
    027E DE22      RCALL	_delay_nms
    027F 5041      SUBI	R20,1
    0280 4050      SBCI	R21,0
    0281 3040      CPI	R20,0
    0282 0745      CPC	R20,R21
    0283 F009      BEQ	0x0285
    0284 CF8A      RJMP	0x020F
(0364)    for (i=3;i>0;i--){LED1;LED14;LED4;LED41;LED4;LED43;LED3;LED34;LED3;LED32;LED2;LED23;LED2;LED21;LED1;LED12}
    0285 E043      LDI	R20,3
    0286 E050      LDI	R21,0
    0287 C072      RJMP	0x02FA
    0288 98C3      CBI	0x18,3
    0289 9AC2      SBI	0x18,2
    028A 9AC1      SBI	0x18,1
    028B 9AC0      SBI	0x18,0
    028C E604      LDI	R16,0x64
    028D E010      LDI	R17,0
    028E DE12      RCALL	_delay_nms
    028F 98C3      CBI	0x18,3
    0290 9AC2      SBI	0x18,2
    0291 98C1      CBI	0x18,1
    0292 9AC0      SBI	0x18,0
    0293 E604      LDI	R16,0x64
    0294 E010      LDI	R17,0
    0295 DE0B      RCALL	_delay_nms
    0296 98C1      CBI	0x18,1
    0297 9AC2      SBI	0x18,2
    0298 9AC3      SBI	0x18,3
    0299 9AC0      SBI	0x18,0
    029A E604      LDI	R16,0x64
    029B E010      LDI	R17,0
    029C DE04      RCALL	_delay_nms
    029D 98C1      CBI	0x18,1
    029E 9AC2      SBI	0x18,2
    029F 98C3      CBI	0x18,3
    02A0 9AC0      SBI	0x18,0
    02A1 E604      LDI	R16,0x64
    02A2 E010      LDI	R17,0
    02A3 DDFD      RCALL	_delay_nms
    02A4 98C1      CBI	0x18,1
    02A5 9AC2      SBI	0x18,2
    02A6 9AC3      SBI	0x18,3
    02A7 9AC0      SBI	0x18,0
    02A8 E604      LDI	R16,0x64
    02A9 E010      LDI	R17,0
    02AA DDF6      RCALL	_delay_nms
    02AB 98C1      CBI	0x18,1
    02AC 9AC2      SBI	0x18,2
    02AD 9AC3      SBI	0x18,3
    02AE 98C0      CBI	0x18,0
    02AF E604      LDI	R16,0x64
    02B0 E010      LDI	R17,0
    02B1 DDEF      RCALL	_delay_nms
    02B2 98C0      CBI	0x18,0
    02B3 9AC2      SBI	0x18,2
    02B4 9AC1      SBI	0x18,1
    02B5 9AC3      SBI	0x18,3
    02B6 E604      LDI	R16,0x64
    02B7 E010      LDI	R17,0
    02B8 DDE8      RCALL	_delay_nms
    02B9 98C0      CBI	0x18,0
    02BA 9AC2      SBI	0x18,2
    02BB 98C1      CBI	0x18,1
    02BC 9AC3      SBI	0x18,3
    02BD E604      LDI	R16,0x64
    02BE E010      LDI	R17,0
    02BF DDE1      RCALL	_delay_nms
    02C0 98C0      CBI	0x18,0
    02C1 9AC2      SBI	0x18,2
    02C2 9AC1      SBI	0x18,1
    02C3 9AC3      SBI	0x18,3
    02C4 E604      LDI	R16,0x64
    02C5 E010      LDI	R17,0
    02C6 DDDA      RCALL	_delay_nms
    02C7 98C0      CBI	0x18,0
    02C8 98C2      CBI	0x18,2
    02C9 9AC1      SBI	0x18,1
    02CA 9AC3      SBI	0x18,3
    02CB E604      LDI	R16,0x64
    02CC E010      LDI	R17,0
    02CD DDD3      RCALL	_delay_nms
    02CE 98C2      CBI	0x18,2
    02CF 9AC3      SBI	0x18,3
    02D0 9AC1      SBI	0x18,1
    02D1 9AC0      SBI	0x18,0
    02D2 E604      LDI	R16,0x64
    02D3 E010      LDI	R17,0
    02D4 DDCC      RCALL	_delay_nms
    02D5 98C2      CBI	0x18,2
    02D6 9AC3      SBI	0x18,3
    02D7 9AC1      SBI	0x18,1
    02D8 98C0      CBI	0x18,0
    02D9 E604      LDI	R16,0x64
    02DA E010      LDI	R17,0
    02DB DDC5      RCALL	_delay_nms
    02DC 98C2      CBI	0x18,2
    02DD 9AC3      SBI	0x18,3
    02DE 9AC1      SBI	0x18,1
    02DF 9AC0      SBI	0x18,0
    02E0 E604      LDI	R16,0x64
    02E1 E010      LDI	R17,0
    02E2 DDBE      RCALL	_delay_nms
    02E3 98C2      CBI	0x18,2
    02E4 98C3      CBI	0x18,3
    02E5 9AC1      SBI	0x18,1
    02E6 9AC0      SBI	0x18,0
    02E7 E604      LDI	R16,0x64
    02E8 E010      LDI	R17,0
    02E9 DDB7      RCALL	_delay_nms
    02EA 98C3      CBI	0x18,3
    02EB 9AC2      SBI	0x18,2
    02EC 9AC1      SBI	0x18,1
    02ED 9AC0      SBI	0x18,0
    02EE E604      LDI	R16,0x64
    02EF E010      LDI	R17,0
    02F0 DDB0      RCALL	_delay_nms
    02F1 98C3      CBI	0x18,3
    02F2 98C2      CBI	0x18,2
    02F3 9AC1      SBI	0x18,1
    02F4 9AC0      SBI	0x18,0
    02F5 E604      LDI	R16,0x64
    02F6 E010      LDI	R17,0
    02F7 DDA9      RCALL	_delay_nms
    02F8 5041      SUBI	R20,1
    02F9 4050      SBCI	R21,0
    02FA 3040      CPI	R20,0
    02FB 0745      CPC	R20,R21
    02FC F009      BEQ	0x02FE
    02FD CF8A      RJMP	0x0288
    02FE 940E046D  CALL	pop_gset1
    0300 9508      RET
_USART_InitM1681:
  tmp                  --> R10
  baud                 --> R10
    0301 940E0466  CALL	push_gset3
    0303 0158      MOVW	R10,R16
(0365) }
(0366) 
(0367) 
(0368) /******************************************************************************
(0369) 功能:设置波特以及串口中断相关函数
(0370) 函数:void USART_InitM1681( unsigned int baud )
(0371)      void USART_InitM1682( unsigned int baud )
(0372) 	 #pragma interrupt_handler uart0_rx_isr_m16:12
(0373) 	 #pragma interrupt_handler uart0_tx_isr_m16:14
(0374) 返回值:无
(0375) 备注:Fosc   晶振  如:4000000  4MHz
(0376)      baud   传输速度  19200
(0377)      1681意思是8位 1停止位
(0378)      1682意思是8位 2停止位
(0379) #define F_CPU     3686400
(0380) #define F_CPU     4000000
(0381) //其他根据需要填写必须要定义的                       
(0382) ******************************************************************************/
(0383) #define F_CPU     3686400
(0384) void USART_InitM1681( unsigned int baud )
(0385) {
(0386) unsigned int tmp;
(0387) //设置波特率
(0388)     tmp= F_CPU/baud/16-1;
    0304 0115      MOVW	R2,R10
    0305 2444      CLR	R4
    0306 2455      CLR	R5
    0307 E040      LDI	R20,0
    0308 E450      LDI	R21,0x40
    0309 E368      LDI	R22,0x38
    030A E070      LDI	R23,0
    030B 925A      ST	R5,-Y
    030C 924A      ST	R4,-Y
    030D 923A      ST	R3,-Y
    030E 922A      ST	R2,-Y
    030F 018A      MOVW	R16,R20
    0310 019B      MOVW	R18,R22
    0311 940E03F1  CALL	div32s
    0313 E140      LDI	R20,0x10
    0314 E050      LDI	R21,0
    0315 E060      LDI	R22,0
    0316 E070      LDI	R23,0
    0317 937A      ST	R23,-Y
    0318 936A      ST	R22,-Y
    0319 935A      ST	R21,-Y
    031A 934A      ST	R20,-Y
    031B 940E03F1  CALL	div32s
    031D 0118      MOVW	R2,R16
    031E 0129      MOVW	R4,R18
    031F E041      LDI	R20,1
    0320 E050      LDI	R21,0
    0321 E060      LDI	R22,0
    0322 E070      LDI	R23,0
    0323 1A24      SUB	R2,R20
    0324 0A35      SBC	R3,R21
    0325 0A46      SBC	R4,R22
    0326 0A57      SBC	R5,R23
    0327 0151      MOVW	R10,R2
(0389) 	//tmp= F_CPU3864/baud/16-1;
(0390)     UBRRH = (unsigned char)(tmp>>8);
    0328 2C23      MOV	R2,R3
    0329 2433      CLR	R3
    032A BC20      OUT	0x20,R2
(0391)     UBRRL = (unsigned char)tmp;
    032B B8A9      OUT	0x09,R10
(0392) //接收器与发送器使能//
(0393)   //  UCSRB = (1<<RXEN)|(1<<TXEN);
(0394) //接收器与发送器使能及接收中断使能
(0395) 	UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    032C E988      LDI	R24,0x98
    032D B98A      OUT	0x0A,R24
(0396) //接收器与发送器使能及收发中断使能
(0397) //	UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
(0398) // 设置帧格式: 8 个数据位, 1 个停止位//
(0399)     UCSRC = (1<<URSEL)|(3<<UCSZ0);
    032E E886      LDI	R24,0x86
    032F BD80      OUT	0x20,R24
    0330 940E045F  CALL	pop_gset3
    0332 9508      RET
_USART_InitM1682:
  tmp                  --> R10
  baud                 --> R10
    0333 940E0466  CALL	push_gset3
    0335 0158      MOVW	R10,R16
(0400) }
(0401) 
(0402) void USART_InitM1682( unsigned int baud )
(0403) {
(0404) unsigned int tmp;
(0405) // 设置波特率//
(0406)     tmp= F_CPU/baud/16-1;
    0336 0115      MOVW	R2,R10
    0337 2444      CLR	R4
    0338 2455      CLR	R5
    0339 E040      LDI	R20,0
    033A E450      LDI	R21,0x40
    033B E368      LDI	R22,0x38
    033C E070      LDI	R23,0
    033D 925A      ST	R5,-Y
    033E 924A      ST	R4,-Y
    033F 923A      ST	R3,-Y
    0340 922A      ST	R2,-Y
    0341 018A      MOVW	R16,R20
    0342 019B      MOVW	R18,R22
    0343 940E03F1  CALL	div32s
    0345 E140      LDI	R20,0x10
    0346 E050      LDI	R21,0
    0347 E060      LDI	R22,0
    0348 E070      LDI	R23,0
    0349 937A      ST	R23,-Y
    034A 936A      ST	R22,-Y
    034B 935A      ST	R21,-Y
    034C 934A      ST	R20,-Y
    034D 940E03F1  CALL	div32s
    034F 0118      MOVW	R2,R16
    0350 0129      MOVW	R4,R18
    0351 E041      LDI	R20,1
    0352 E050      LDI	R21,0
    0353 E060      LDI	R22,0
    0354 E070      LDI	R23,0
    0355 1A24      SUB	R2,R20
    0356 0A35      SBC	R3,R21
    0357 0A46      SBC	R4,R22
    0358 0A57      SBC	R5,R23
    0359 0151      MOVW	R10,R2
(0407)     UBRRH = (unsigned char)(tmp>>8);
    035A 2C23      MOV	R2,R3
    035B 2433      CLR	R3
    035C BC20      OUT	0x20,R2
(0408)     UBRRL = (unsigned char)tmp;
    035D B8A9      OUT	0x09,R10
(0409) //接收器与发送器使能//
(0410)  //   UCSRB = (1<<RXEN)|(1<<TXEN);
(0411)  //接收器与发送器使能及接收中断使能
(0412) 	UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
    035E E988      LDI	R24,0x98
    035F B98A      OUT	0x0A,R24
(0413) //接收器与发送器使能及收发中断使能
(0414) //	UCSRB = (1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
(0415) //设置帧格式: 8 个数据位, 2 个停止位//
(0416) UCSRC = (1<<URSEL)|(1<<USBS)|(1<<UCSZ0)|(1<<UCSZ1);
    0360 E88E      LDI	R24,0x8E
    0361 BD80      OUT	0x20,R24
    0362 940E045F  CALL	pop_gset3
    0364 9508      RET
(0417) }
(0418) 
(0419) /*以下为接收及发送相关中断函数,使用时调用即可
(0420) //中断向量号很重要不能搞错
(0421) 
(0422) 
(0423) uint tmp;
(0424) #pragma interrupt_handler uart0_rx_isr_m16:12
(0425) void uart0_rx_isr_m16(void)
(0426) {
(0427)   tmp=USART_Receive8();
(0428)   USART_Transmit8(tmp);
(0429)   //有数据接收时的提示红灯闪动
(0430)   if(tmp=='a')
(0431) 	{
(0432) 	USART_Transmit8('O');
(0433) 	USART_Transmit8('K');
(0434) 	USART_Transmit_2();
(0435) 	} 
(0436)    Green_LedOFF;
(0437) 	for(tmp=0;tmp<3;tmp++){
(0438)     Red_LedOFF;
(0439)     delay_nms(300);
(0440) 	Red_LedON;
(0441) 	delay_nms(300);} 		  
(0442) }
(0443) 
(0444) #pragma interrupt_handler uart0_tx_isr_m16:14
(0445) void uart0_tx_isr_m16(void)
(0446) {    //有数据发出时的提示绿灯闪动
(0447)     Red_LedOFF;
(0448) 	for(tmp=0;tmp<3;tmp++){
(0449)     Green_LedON;
(0450)     delay_nms(300);
(0451) 	Green_LedOFF;
(0452) 	delay_nms(300);}
(0453)   //  USART_Transmit8('O');///如果再次发送数据则会进入死循环。不建议
(0454) 	//USART_Transmit8('K');
(0455) 	//USART_Transmit8('?');	  
(0456) }
(0457) 
(0458) 
(0459) */
(0460) /******************************************************************************
(0461) 功能:外中断定义
(0462) 函数:#pragma interrupt_handler INT0_isr_m16:2
(0463)      #pragma interrupt_handler INT1_isr_m16:3
(0464) 返回值:无
(0465) 备注:
(0466) 包括初始化程序:void INT0_init(void)//外中断0使能
(0467)                void INT1_init(void)//外中断1使能
(0468) 			   void INT01_init(void)//外中断0和1使能
(0469) 			   
(0470) 特别要注意的是:PORTD = 0xff;如果低电平触发则初始化时要高电平。
(0471) 
(0472) ******************************************************************************/
(0473) void INT0_init(void)//外中断0使能
(0474) { 
(0475)   CLI();
_INT0_init:
    0365 94F8      BCLR	7
(0476)   MCUCR = 0x00;//外中断01低电平触发
    0366 2422      CLR	R2
    0367 BE25      OUT	0x35,R2
(0477)   GIFR=(1<<INTF1)|(1<<INTF0);//GIFR=0x00;通用中断标志寄存器
    0368 EC80      LDI	R24,0xC0
    0369 BF8A      OUT	0x3A,R24
(0478)   GICR=(1<<INT0);
    036A E480      LDI	R24,0x40
    036B BF8B      OUT	0x3B,R24
(0479)   SEI();
    036C 9478      BSET	7
    036D 9508      RET
(0480) }
(0481) void INT1_init(void)//外中断1使能
(0482) { 
(0483)   CLI();
_INT1_init:
    036E 94F8      BCLR	7
(0484)   MCUCR = 0x00;//外中断01低电平触发
    036F 2422      CLR	R2
    0370 BE25      OUT	0x35,R2
(0485)   GIFR=(1<<INTF1)|(1<<INTF0);//GIFR=0x00;通用中断标志寄存器
    0371 EC80      LDI	R24,0xC0
    0372 BF8A      OUT	0x3A,R24
(0486)   GICR=(1<<INT1);
    0373 E880      LDI	R24,0x80
    0374 BF8B      OUT	0x3B,R24
(0487)   SEI();
    0375 9478      BSET	7
    0376 9508      RET
(0488) }
(0489) void INT01_init(void)//外中断0和1使能
(0490) { 
(0491)   CLI();
_INT01_init:
    0377 94F8      BCLR	7
(0492)   MCUCR = 0x00;//外中断01低电平触发
    0378 2422      CLR	R2
    0379 BE25      OUT	0x35,R2

⌨️ 快捷键说明

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