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

📄 mainbd.s

📁 实现mega8的isp操作
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module MainBd.c
	.area data(ram, con, rel)
_SendSbuf::
	.blkb 10
	.area idata
	.byte 'C,'F,'C,'F,'C,'F,'M,'M,'x,0
	.area data(ram, con, rel)
	.blkb 10
	.area idata
	.byte 0,0,0,0,0,0,0,0,0,0
	.area data(ram, con, rel)
	.dbfile E:\AVR\P_TEST\MainBd.c
	.dbsym e SendSbuf _SendSbuf A[20:20]c
	.area lit(rom, con, rel)
_Call::
	.byte 'C,'F,'C,'F,'C,'F,'M,'M,'x,0
	.dbsym e Call _Call A[10:10]kc
_SET::
	.byte 'S,'E,'T,45,0
	.dbsym e SET _SET A[5:5]kc
_CF::
	.byte 'C,'F,'M,'K,0
	.dbsym e CF _CF A[5:5]kc
	.area text(rom, con, rel)
	.dbfile E:\AVR\P_TEST\MainBd.c
	.dbfunc e main _main fV
;              k -> <dead>
;           test -> <dead>
;              j -> <dead>
;              i -> R20,R21
	.even
_main::
	.dbline -1
	.dbline 92
; /*
; ******************************************************************************
; 			  无线数字传送程序
; 			  v1.0
; 			  write by Mr. pan
; 			  All rights reversed
; ******************************************************************************
; */
; 
; #include<iom8v.h>
; #include<macros.h>
; #include<eeprom.h>
; 
; 
; #define baud  9600
; #define fosc  3579545
; 
; //--变量声明区---//
; unsigned char Sbufx;
; unsigned char SendSbuf[20]={"CFCFCFMMx"};  //中断发送用的缓冲,发送后清零
; unsigned char krec,ReceiveSbuf[20];  //接收缓冲
; unsigned char *SendPoint,Send_flag; 
; unsigned char TimeForCall; 
; unsigned  int  NowSend,TimeForSend;
; unsigned char  ICRead;
; 
; unsigned char  const  Call[]={"CFCFCFMMx"};
; //--TIMER0 USE
; unsigned char T0_Count; 
; //=========函数声明区=====//
; void initialM8(void);
; void putchar(unsigned char c);
; unsigned char getchar(void);
; void ReadEEPROM();
; void PTR2K_SEND();
; void PTR2K_RECEIVE();
; void WRITEEEPROM();
; 
; //========模拟I2C 定义===//
; //SDA-->PC1  ,SCL-->PC4,  CS-->PC2 ,RST -->PC5
; //SDA-->PC1 
; #define SDAH()    (PORTC|=(1<<PC1))
; #define SDAL()    (PORTC&=0XFD)
; //  SCL-->PC4
; #define SCLH()    (PORTC|=(1<<PC4))
; #define SCLL()    (PORTC&=0XEF)
; // CS-->PC2
; #define CSL()    (PORTC&=0XFB)
; #define CSH()    (PORTC|=(1<<PC2))
; //  RST -->PC5
; #define RSTL()   (PORTC&=0XDF) 
; #define RSTH()   (PORTC|=(1<<PC5)) 
; //SDA --输入
; #define SDAIN()   (DDRC&=0XDF) 
; #define SDAOUT()   (DDRC=0XFF) 
; //========模拟I2C 函数声明===//
; void I2C_Write(unsigned char addr,unsigned char Wbyte); //1
; unsigned char  I2C_Read(unsigned char addr);  //2
; unsigned char  I2C_ReadByte();  //3
; void I2C_WriteByte(unsigned char WriteByte); //4
; void I2C_NACK();  //6
; void I2C_CACK() ; //5
; void I2C_ACK();  //7
; void I2C_Stop(); //8
; void I2C_Start(); //9
; void sdelay(unsigned char k);
; void I2C_Reset();
; 
; void IC_Num_Read();
; 
; 
; void I2C_CACK();
; 
; void putstr(char *s);
; void Timer2_initial();
; unsigned char kr1,kr2;
; char const SET[]={"SET-"};//格式 :SET-001-015-0   Car NO+Dirver NO+CS=0/1
; char const CF[]={"CFMK"}; //接收主机命令 
; 
; struct node 
; {
; 	   char datax;
; 	 
;  };
;  
; /*============================================================
; 					   MAIN START
; ===========================================================           
; */
; 
; void main()
; {
	.dbline 95
;  	 unsigned int i,j;
; 	 unsigned char test, k;
;      initialM8();
	rcall _initialM8
	.dbline 97
; 
;     ReadEEPROM();
	rcall _ReadEEPROM
	.dbline 98
;  I2C_Reset();
	rcall _I2C_Reset
	.dbline 99
;  i=0;
	clr R20
	clr R21
	.dbline 101
;  //I2C_Write(0,0X40);// test use 
;  SDAIN();
	in R24,0x14
	andi R24,223
	out 0x14,R24
	.dbline 103
;  //--主机设定--//
;  DDRB=0X03;
	ldi R24,3
	out 0x17,R24
	.dbline 104
;  PORTB=0X02;
	ldi R24,2
	out 0x18,R24
	.dbline 106
;  // I2C_Write(0,0X33);
;    sdelay(250);
	ldi R16,250
	rcall _sdelay
	.dbline 107
; 	ICRead=0;
	clr R2
	sts _ICRead,R2
	.dbline 109
; 	
; DDRB=0XFF;
	ldi R24,255
	out 0x17,R24
	.dbline 110
; PORTB=0XFF;	
	out 0x18,R24
	.dbline 114
; //-----------
; 
; //--UART  initial---//
; UCSRB=(1<<RXEN)|(1<<TXEN); // Enable send and receive
	ldi R24,24
	out 0xa,R24
	.dbline 115
; UBRRL=(fosc/16/(baud+1))%256;
	ldi R24,23
	out 0x9,R24
	.dbline 116
; UBRRH=(fosc/16/(baud+1))/256;
	out 0x20,R2
	.dbline 117
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
	ldi R24,134
	out 0x20,R24
	.dbline 119
; //---接收中断使能---//
; UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
	ldi R24,216
	out 0xa,R24
	.dbline 121
; //----------
; NowSend=1200;
	ldi R24,1200
	ldi R25,4
	sts _NowSend+1,R25
	sts _NowSend,R24
	.dbline 122
; SEI();
	sei
	rjmp L3
L2:
	.dbline 124
	.dbline 127
	ldi R16,250
	rcall _sdelay
	.dbline 130
	ldi R16,<L5
	ldi R17,>L5
	rcall _SendString2
	.dbline 133
	clr R2
	sts _T0_Count,R2
	.dbline 135
	ldi R16,250
	rcall _sdelay
	.dbline 138
	ldi R16,250
	rcall _sdelay
	.dbline 141
L3:
	.dbline 123
	rjmp L2
X0:
	.dbline -2
	.dbline 142
; 	 while(1)
; 	 {
; //DDRC=0XFF;	
; 
; 	 sdelay(250);
; 	//PORTC=0;
; 	
;   SendString2("12345");
; 	
; // ----------------------------------------
; 	 T0_Count=0;
; 	
; 	sdelay(250);
; 	//PORTC=0XFF;
; 	
; 	 sdelay(250);
; 	
; 	
; 	 }
; }
L1:
	.dbline 0 ; func end
	ret
	.dbsym l k 1 c
	.dbsym l test 1 c
	.dbsym l j 1 i
	.dbsym r i 20 i
	.dbend
	.dbfunc e initialM8 _initialM8 fV
	.even
_initialM8::
	.dbline -1
	.dbline 147
; /*==========================================================================//
; 									END MAIN()
; ============================================================================*/
; void initialM8()
; {
	.dbline 151
; //== initial Timer0 as timer ==//
; 
; //--UART  initial---//
; UCSRB=(1<<RXEN)|(1<<TXEN); // Enable send and receive
	ldi R24,24
	out 0xa,R24
	.dbline 152
; UBRRL=(fosc/16/(baud+1))%256;
	ldi R24,23
	out 0x9,R24
	.dbline 153
; UBRRH=(fosc/16/(baud+1))/256;
	clr R2
	out 0x20,R2
	.dbline 154
; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
	ldi R24,134
	out 0x20,R24
	.dbline 156
; //---接收中断使能---//
; UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
	ldi R24,216
	out 0xa,R24
	.dbline 159
; 
; //---定时器0初始化---//
; TCCR0=(1<<CS02)|(1<<CS00);  //  分频率=fosc/1204 
	ldi R24,5
	out 0x33,R24
	.dbline 160
; TIMSK=(1<<TOIE0);
	ldi R24,1
	out 0x39,R24
	.dbline 161
; TCNT0=256-(baud/1024)/20;  //定时0.05s 
	ldi R24,256
	ldi R25,1
	out 0x32,R24
	.dbline 162
; T0_Count=0;
	sts _T0_Count,R2
	.dbline 164
; 
; TimeForCall=0;
	sts _TimeForCall,R2
	.dbline 166
; //--------------------//
; SEI();  	 
	sei
	.dbline 167
; DDRC=0XFF;
	ldi R24,255
	out 0x14,R24
	.dbline 168
;  PORTC=0;
	out 0x15,R2
	.dbline 169
;  Sbufx=0;
	sts _Sbufx,R2
	.dbline 171
; //===PTR2000+ CONTROL ==//
; DDRD|=0Xff;
	in R24,0x11
	ori R24,255
	out 0x11,R24
	.dbline 172
; PORTD|=0XF0;
	in R24,0x12
	ori R24,240
	out 0x12,R24
	.dbline 173
; PORTD&=0XEF;
	in R24,0x12
	andi R24,239
	out 0x12,R24
	.dbline 174
; PTR2K_RECEIVE();	  //启动定为接收
	rcall _PTR2K_RECEIVE
L7:
	.dbline 175
L8:
	.dbline 175
; while(T0_Count<10);
	lds R24,_T0_Count
	cpi R24,10
	brlo L7
	.dbline 176
; putstr("Start 00 \r\n");
	ldi R16,<L10
	ldi R17,>L10
	rcall _putstr
	.dbline 177
; PORTC=0;
	clr R2
	out 0x15,R2
	.dbline 179
; 
; Sbufx=0;
	sts _Sbufx,R2
	.dbline 180
; Send_flag=0;
	sts _Send_flag,R2
	.dbline 181
; Timer2_initial();
	.dbline -2
	.dbline 183
; 
; }
L6:
	.dbline 0 ; func end
	rjmp _Timer2_initial
	.dbend
	.dbfunc e putchar _putchar fV
;              C -> R16
	.even
_putchar::
	.dbline -1
	.dbline 186
; 
; void putchar(unsigned char C)
; {
L12:
	.dbline 189
L13:
	.dbline 189
; //---关中断发送使能---//
; //UCSRB&=0XDF;
;  	 while(!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L12
	.dbline 190
; 	 UDR=C;
	out 0xc,R16
	.dbline -2
	.dbline 193
; //UCSRB|=0X40; 
; //---开中断发送使能--//
; }
L11:
	.dbline 0 ; func end
	ret
	.dbsym r C 16 c
	.dbend
	.dbfunc e getchar _getchar fc
	.even
_getchar::
	.dbline -1
	.dbline 196
; 
; unsigned char getchar(void)
; {
L16:
	.dbline 197
L17:
	.dbline 197
;  	 while(!(UCSRA&(1<<RXC)));
	sbis 0xb,7
	rjmp L16
	.dbline 198
; 	 return UDR;
	in R16,0xc
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e putstr _putstr fV
;              s -> R20,R21
	.even
_putstr::
	rcall push_gset1
	mov R20,R16
	mov R21,R17
	.dbline -1
	.dbline 202
; }
; 
; void putstr(char *s)
; {
	rjmp L21
L20:
	.dbline 204
	.dbline 205
	mov R30,R20
	mov R31,R21
	ldd R16,z+0
	rcall _putchar
	.dbline 206
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 208
L21:
	.dbline 203
;  	 while(*s)
	mov R30,R20
	mov R31,R21
	ldd R2,z+0
	tst R2
	brne L20
	.dbline -2
	.dbline 209
; 	 {
; 	  	  putchar(*s);
; 		  s++;
; 	  	  
; 	 }
; }
L19:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r s 20 pc
	.dbend
	.area vector(rom, abs)
	.org 26
	rjmp _Send_using_interrupt
	.area text(rom, con, rel)
	.dbfile E:\AVR\P_TEST\MainBd.c
	.dbfunc e Send_using_interrupt _Send_using_interrupt fV
	.even
_Send_using_interrupt::
	rcall push_lset
	.dbline -1
	.dbline 214
; 
; ///--- 发送 结束中断--硬件自动清零TXC标志位//
; #pragma interrupt_handler Send_using_interrupt:iv_USART_TXC 
; void Send_using_interrupt(void)
; {
	.dbline 217
; 
;  	 
;  	 if(*SendPoint)
	lds R30,_SendPoint
	lds R31,_SendPoint+1
	ldd R2,z+0
	tst R2
	breq L24
	.dbline 218
; 	 {
	.dbline 219
; 	  	UDR=*SendPoint;
	out 0xc,R2
	.dbline 220
; 		Send_flag=1;  //用他的 BIT0 记录发送
	ldi R24,1
	sts _Send_flag,R24
	.dbline 222
; 		//*SendPoint=0;// 清零表明已经发送
; 		SendPoint++;
	mov R24,R30
	mov R25,R31
	adiw R24,1
	sts _SendPoint+1,R25
	sts _SendPoint,R24
	.dbline 223
; 		return;
	rjmp L23
L24:
	.dbline 226
; 	 }
; 	 else
; 	 { //--添加发送结束 标志的代码 here
	.dbline 227
; 	    Send_flag=0;
	clr R2
	sts _Send_flag,R2
	.dbline 229
; 		
; 		PTR2K_RECEIVE(); //由发送改为接收
	rcall _PTR2K_RECEIVE
	.dbline 232
; 		
; 		//---------选择PC232 发送---PB1=1;-----//
; 		   DDRB=0X03;
	ldi R24,3
	out 0x17,R24
	.dbline 233
; 		   PORTB|=(1<<PB0)|(1<<PB1);
	in R24,0x18
	ori R24,3
	out 0x18,R24
	.dbline 235
; 		//------------------------------
; 	 }
	.dbline -2
	.dbline 237
; 	 
; }
L23:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e SendString2 _SendString2 fV
;              p -> R20,R21
;          str10 -> R16,R17
	.even
_SendString2::
	rcall push_gset1
	.dbline -1
	.dbline 240
; //--不能超过20个字符
; void SendString2(unsigned char *str10)
; {
	.dbline 244
;  	 unsigned char *p;
; 	 
;  	
;  	SEI();
	sei
L27:
	.dbline 245
L28:
	.dbline 245
; 	while(Send_flag>0);//等待中断发送结束
	clr R2
	lds R3,_Send_flag
	cp R2,R3
	brlo L27
	.dbline 246
; 	 p=SendSbuf;
	ldi R20,<_SendSbuf
	ldi R21,>_SendSbuf
	rjmp L31
L30:
	.dbline 248
	.dbline 250
	mov R30,R16
	mov R31,R17
	ldd R2,z+0
	mov R30,R20
	mov R31,R21
	std z+0,R2
	.dbline 251
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 252
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline 255
L31:
	.dbline 247
;      while(*str10)
	mov R30,R16
	mov R31,R17
	ldd R2,z+0
	tst R2
	brne L30
	.dbline 258
; 	 {
; 	  		
; 			 	  *p=*str10;
; 				  p++;
; 				  str10++;
; 		
; 			//要有超时间判断,防止死循环====??????
; 	}
; 	  //--开发送中断使能----//
; 	  
; 	  SendPoint=SendSbuf;
	ldi R24,<_SendSbuf
	ldi R25,>_SendSbuf
	sts _SendPoint+1,R25
	sts _SendPoint,R24
	.dbline 259
; 	  UDR=*SendPoint;  //启动发送中断
	mov R30,R24
	mov R31,R25
	ldd R2,z+0
	out 0xc,R2
	.dbline 260
; 	  SendPoint++;
	adiw R24,1
	sts _SendPoint+1,R25
	sts _SendPoint,R24
L33:
	.dbline 261
L34:
	.dbline 261
; 	  while(!Send_flag);
	lds R2,_Send_flag
	tst R2
	breq L33
	.dbline -2
	.dbline 262
; }
L26:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pc
	.dbsym r str10 16 pc
	.dbend
	.area vector(rom, abs)
	.org 22
	rjmp _Receive_using_interrupt
	.area text(rom, con, rel)
	.dbfile E:\AVR\P_TEST\MainBd.c
	.dbfunc e Receive_using_interrupt _Receive_using_interrupt fV
	.even
_Receive_using_interrupt::
	st -y,R2
	st -y,R24
	st -y,R25
	st -y,R30
	st -y,R31
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 267
; 
; //---接收中断--//
; #pragma interrupt_handler Receive_using_interrupt:iv_USART_RX
; void Receive_using_interrupt(void)
; {
	.dbline 269
;  	 //"SET- "-- AND --"CF"
; 	 Sbufx=UDR;
	in R2,0xc
	sts _Sbufx,R2
	.dbline 274
; 		
; 	 
; 	
; 	
; 	 if((Sbufx>9)&&(Sbufx<128))
	ldi R24,9
	cp R24,R2
	brsh L37
	mov R24,R2
	cpi R24,128
	brsh L37
	.dbline 275
; 	  {
	.dbline 276
; 	   	 if(krec<19) ReceiveSbuf[krec]=Sbufx;
	lds R24,_krec
	cpi R24,19
	brsh L39
	.dbline 276
	ldi R24,<_ReceiveSbuf
	ldi R25,>_ReceiveSbuf
	lds R30,_krec
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
L39:
	.dbline 277
; 		  krec++;
	lds R24,_krec
	subi R24,255    ; addi 1
	sts _krec,R24
	.dbline 278
; 	     UDR=Sbufx; ///把收到的马上发送给COMPUTER   test only
	lds R2,_Sbufx
	out 0xc,R2
	.dbline 279
; 	  }
L37:
	.dbline 281
	lds R24,_Sbufx
	cpi R24,77
	brne L41
	ldi R24,101
	lds R2,_kr2
	cp R24,R2
	brsh L41
	.dbline 282
	.dbline 283
	ldi R24,100
	sts _kr2,R24
	.dbline 284
	clr R2
	out 0x24,R2
	.dbline 285
	ldi R24,180
	out 0x23,R24
	.dbline 290
L41:
	.dbline -2
	.dbline 292
; 	  
; 	  if((Sbufx=='M')&&(kr2>101))  //--同步定时信号,T2
; 	  {
; 	   		kr2=100;
; 	   		TCNT2=0;
; 			OCR2=180;  //90;//0.2ms,
; 		//	TimeForSend=0;  //30<=>12ms
; 	   	//	TCCR2=(1<<WGM21)|(1<<CS21); //8分频率 ,TCT比较输出MODE
; 			//--PTR2000 SEND MODE--//
; 			//PTR2K_SEND();  //启动发送
; 	  }
; 	 
; }
L36:
	ld R2,y+
	out 0x3f,R2
	ld R31,y+
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.area vector(rom, abs)
	.org 18
	rjmp _Timer0_interrupt
	.area text(rom, con, rel)
	.dbfile E:\AVR\P_TEST\MainBd.c
	.dbfunc e Timer0_interrupt _Timer0_interrupt fV
	.even
_Timer0_interrupt::
	st -y,R24
	st -y,R25
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 299
; 
; 
; ///====定时器0中断函数====//
; #pragma interrupt_handler Timer0_interrupt:iv_TIMER0_OVF
; 
; void  Timer0_interrupt(void)
; {
	.dbline 300
;  	  TCNT0=238;//256-(baud/1024)/200;  //定时0.005s 
	ldi R24,238
	out 0x32,R24
	.dbline 301
; 	  T0_Count++;
	lds R24,_T0_Count
	subi R24,255    ; addi 1
	sts _T0_Count,R24
	.dbline -2
	.dbline 304
; 		
; 	  
; }
L43:
	ld R24,y+
	out 0x3f,R24
	ld R25,y+
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Timer2_initial _Timer2_initial fV
	.even
_Timer2_initial::
	.dbline -1
	.dbline 308
; 
; //--定时器2精确定时用---//
; void Timer2_initial()
; {
	.dbline 309
;  	 OCR2=180;//90;//0.2ms--180=>0.4ms
	ldi R24,180
	out 0x23,R24
	.dbline 311
; 	  //=x1;
; 	 TCNT2=0;
	clr R2
	out 0x24,R2
	.dbline 312
; 	 TIMSK|=(1<<OCIE2); //匹配中断使能
	in R24,0x39
	ori R24,128
	out 0x39,R24
	.dbline 313
; 	 TCCR2=(1<<WGM21)|(1<<CS21); //8分频率 ,TCT比较输出MODE
	ldi R24,10
	out 0x25,R24
	.dbline 314
; 	 TimeForSend=0;
	clr R3
	sts _TimeForSend+1,R3
	sts _TimeForSend,R2
	.dbline -2
	.dbline 315
; }
L44:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 6

⌨️ 快捷键说明

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