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

📄 uart.s

📁 cc1020 串口通讯
💻 S
📖 第 1 页 / 共 4 页
字号:
	brlo L47
L45:
	movw R30,R28
	ldd R2,z+10
	ldd R3,z+11
	ldd R4,z+12
	ldd R5,z+13
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	sub R2,R20
	sbc R3,R21
	sbc R4,R22
	sbc R5,R23
	movw R30,R28
	std z+10,R2
	std z+11,R3
	std z+12,R4
	std z+13,R5
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	breq X2
	rjmp L44
X2:
L43:
	adiw R28,4
	rcall pop_gset3
	adiw R28,4
	.dbline 0 ; func end
	ret
;              s -> R20,R21
	.even
_puts::
	rcall push_gset1
	movw R20,R16
;       for(loopi=0;loopi<2;loopi++);
;    }
; }
; 
; 
; 	
; /*			字符串输出函数	   	 */	
; void puts(char *s)
; 	{
	rjmp L53
L52:
	movw R30,R20
	ldd R16,z+0
	rcall _putchar
	subi R20,255  ; offset = 1
	sbci R21,255
L53:
; 	while (*s)
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L52
; 		{
; 		putchar(*s);
; 		s++;
; 		}	
;     putchar(0x0a);//回车换行
	ldi R16,10
	rcall _putchar
; 	putchar(0x0d);
	ldi R16,13
	rcall _putchar
L51:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.even
_uart_init::
; 	}
; 
; 
; /*			UART初始化				*/	
; void uart_init(void)
; {
; // OSCCAL=read_flash(0x1f20);
;  rsok00=0;
	clr R2
	sts _rsok00,R2
;  rsok10=0;
	sts _rsok10,R2
;  rsok20=0;
	sts _rsok20,R2
;  rsok30=0;
	sts _rsok30,R2
;  rsok40=0;
	sts _rsok40,R2
;  rcvd1=0x00;
	sts _rcvd1,R2
;  rscnt11=0x00;
	sts _rscnt11,R2
;  rscnt12=0x00;
	sts _rscnt12,R2
;  rscnt13=0x00;
	sts _rscnt13,R2
;  rscnt01=0x00;
	sts _rscnt01,R2
;  xx0=0;xx1=0;
	sts _xx0,R2
	sts _xx1,R2
;  //UCSRB=0x90;//允许发送并开接收中断,发送不使能
;  UCSRB = 0x00;
	out 0xa,R2
;  UCSRA = 0x00;
	out 0xb,R2
;  UBRRL=(fosc/16/(baud+1))%256;
	ldi R24,104
	out 0x9,R24
;  UBRRH=(fosc/16/(baud+1))/256;
	out 0x20,R2
;  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
	ldi R24,134
	out 0x20,R24
;  UCSRB=0x98;
	ldi R24,152
	out 0xa,R24
L55:
	.dbline 0 ; func end
	ret
	.even
_port_init::
; }
; 
; void port_init(void)
; {
; 	//PB1-PCLK
; 	//PB0-PDIO
;  	PORTB = 0x00;
	clr R2
	out 0x18,R2
;  	DDRB  = 0x03;
	ldi R24,3
	out 0x17,R24
;   //PD5-PSEL
;  //PD3-DCLK
;  //PD4-DIO
;  	PORTD = 0x20;
	ldi R24,32
	out 0x12,R24
;  	DDRD  = 0x30;
	ldi R24,48
	out 0x11,R24
L56:
	.dbline 0 ; func end
	ret
	.even
_entcomm::
; }
; 
; /* 确认帧 */
; void entcomm(void)
; {
; 	xx0=0;xx1=0;
	clr R2
	sts _xx0,R2
	sts _xx1,R2
; 	UDR=0x55;
	ldi R24,85
	out 0xc,R24
; 	xx0=xx0^0x55;
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x55;
	lds R24,_xx1
	subi R24,171    ; addi 85
	sts _xx1,R24
L58:
L59:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L58
; 	UDR=0xaa;  
	ldi R24,170
	out 0xc,R24
; 	xx0=xx0^0xaa;
	clr R25
	lds R2,_xx0
	clr R3
	eor R2,R24
	eor R3,R25
	sts _xx0,R2
; 	xx1+=0xaa;
	lds R24,_xx1
	subi R24,86    ; addi 170
	sts _xx1,R24
L61:
L62:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L61
; 	UDR=addressper;
	ldi R24,16
	out 0xc,R24
; 	xx0=xx0^addressper;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=addressper;
	lds R24,_xx1
	subi R24,240    ; addi 16
	sts _xx1,R24
L64:
L65:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L64
; 	UDR=0x56;
	ldi R24,86
	out 0xc,R24
; 	xx0=xx0^0x56;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x56;
	lds R24,_xx1
	subi R24,170    ; addi 86
	sts _xx1,R24
L67:
L68:
;  	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L67
; 	UDR=0;
	clr R2
	out 0xc,R2
; 	xx0=xx0^0x00;
	lds R2,_xx0
	sts _xx0,R2
; 	xx1+=0x00;
	lds R2,_xx1
	sts _xx1,R2
L70:
L71:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L70
; 	UDR=0x16;
	ldi R24,22
	out 0xc,R24
; 	xx0=xx0^0x16;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x16;
	lds R24,_xx1
	subi R24,234    ; addi 22
	sts _xx1,R24
L73:
L74:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L73
; 	UDR=xx0;
	lds R2,_xx0
	out 0xc,R2
L76:
L77:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L76
L57:
	.dbline 0 ; func end
	ret
	.even
_voltagerepol::
; }
; 
; /* 发送交流电压值 */
; void voltagerepol(void)
; {
;   xx0=0;xx1=0;
	clr R2
	sts _xx0,R2
	sts _xx1,R2
; 	UDR=0x55;
	ldi R24,85
	out 0xc,R24
; 	xx0=xx0^0x55;
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x55;
	lds R24,_xx1
	subi R24,171    ; addi 85
	sts _xx1,R24
L80:
L81:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L80
; 	UDR=0xaa;  
	ldi R24,170
	out 0xc,R24
; 	xx0=xx0^0xaa;
	clr R25
	lds R2,_xx0
	clr R3
	eor R2,R24
	eor R3,R25
	sts _xx0,R2
; 	xx1+=0xaa;
	lds R24,_xx1
	subi R24,86    ; addi 170
	sts _xx1,R24
L83:
L84:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L83
; 	UDR=addressper;
	ldi R24,16
	out 0xc,R24
; 	xx0=xx0^addressper;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=addressper;
	lds R24,_xx1
	subi R24,240    ; addi 16
	sts _xx1,R24
L86:
L87:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L86
; 	UDR=0x01;
	ldi R24,1
	out 0xc,R24
; 	xx0=xx0^0x01;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x01;
	lds R24,_xx1
	subi R24,255    ; addi 1
	sts _xx1,R24
L89:
L90:
;  	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L89
; 	UDR=0x03;
	ldi R24,3
	out 0xc,R24
; 	xx0=xx0^0x03;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x03;
	lds R24,_xx1
	subi R24,253    ; addi 3
	sts _xx1,R24
L92:
L93:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L92
; 	for(w1=0;w1<3;w1++)
	clr R2
	sts _w1,R2
	rjmp L98
L95:
; 	{
; 	 	UDR=databak[w1];
	ldi R24,<_databak
	ldi R25,>_databak
	lds R30,_w1
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0xc,R2
; 		xx0=xx0^databak[w1];
	lds R30,_w1
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	lds R3,_xx0
	eor R3,R2
	sts _xx0,R3
; 		xx1+=databak[w1];
	lds R30,_w1
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	lds R3,_xx1
	add R3,R2
	sts _xx1,R3
L99:
L100:
	sbis 0xb,5
	rjmp L99
L96:
	lds R24,_w1
	subi R24,255    ; addi 1
	sts _w1,R24
L98:
	lds R24,_w1
	cpi R24,3
	brlo L95
; 		while (!(UCSRA&(1<<UDRE)));
; 	}
; 	UDR=0x16;
	ldi R24,22
	out 0xc,R24
; 	xx0=xx0^0x16;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x16;
	lds R24,_xx1
	subi R24,234    ; addi 22
	sts _xx1,R24
L102:
L103:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L102
; 	UDR=xx0;
	lds R2,_xx0
	out 0xc,R2
L105:
L106:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L105
L79:
	.dbline 0 ; func end
	ret
	.even
_currentrepol::
; }
; 
; /* 发送交流电流值  */
; void currentrepol(void)
; {
;   xx0=0;xx1=0;
	clr R2
	sts _xx0,R2
	sts _xx1,R2
; 	UDR=0x55;
	ldi R24,85
	out 0xc,R24
; 	xx0=xx0^0x55;
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x55;
	lds R24,_xx1
	subi R24,171    ; addi 85
	sts _xx1,R24
L109:
L110:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L109
; 	UDR=0xaa;  
	ldi R24,170
	out 0xc,R24
; 	xx0=xx0^0xaa;
	clr R25
	lds R2,_xx0
	clr R3
	eor R2,R24
	eor R3,R25
	sts _xx0,R2
; 	xx1+=0xaa;
	lds R24,_xx1
	subi R24,86    ; addi 170
	sts _xx1,R24
L112:
L113:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L112
; 	UDR=addressper;
	ldi R24,16
	out 0xc,R24
; 	xx0=xx0^addressper;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=addressper;
	lds R24,_xx1
	subi R24,240    ; addi 16
	sts _xx1,R24
L115:
L116:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L115
; 	UDR=0x02;
	ldi R24,2
	out 0xc,R24
; 	xx0=xx0^0x02;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x02;
	lds R24,_xx1
	subi R24,254    ; addi 2
	sts _xx1,R24
L118:
L119:
;  	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L118
; 	UDR=0x03;
	ldi R24,3
	out 0xc,R24
; 	xx0=xx0^0x03;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x03;
	lds R24,_xx1
	subi R24,253    ; addi 3
	sts _xx1,R24
L121:
L122:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L121
; 	for(w1=0;w1<3;w1++)
	clr R2
	sts _w1,R2
	rjmp L127
L124:
; 	{
; 	 	UDR=databak[w1];
	ldi R24,<_databak
	ldi R25,>_databak
	lds R30,_w1
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0xc,R2
; 		xx0=xx0^databak[w1];
	lds R30,_w1
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	lds R3,_xx0
	eor R3,R2
	sts _xx0,R3
; 		xx1+=databak[w1];
	lds R30,_w1
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	lds R3,_xx1
	add R3,R2
	sts _xx1,R3
L128:
L129:
	sbis 0xb,5
	rjmp L128
L125:
	lds R24,_w1
	subi R24,255    ; addi 1
	sts _w1,R24
L127:
	lds R24,_w1
	cpi R24,3
	brlo L124
; 		while (!(UCSRA&(1<<UDRE)));
; 	}
; 	UDR=0x16;
	ldi R24,22
	out 0xc,R24
; 	xx0=xx0^0x16;
	lds R2,_xx0
	eor R2,R24
	sts _xx0,R2
; 	xx1+=0x16;
	lds R24,_xx1
	subi R24,234    ; addi 22
	sts _xx1,R24
L131:
L132:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L131
; 	UDR=xx0;
	lds R2,_xx0
	out 0xc,R2
L134:
L135:
; 	while (!(UCSRA&(1<<UDRE)));
	sbis 0xb,5
	rjmp L134
L108:
	.dbline 0 ; func end
	ret
;            tmp -> R10
;           itmp -> R12
;           addr -> R10
	.even
_ReadFromCC1020Register::
	rcall push_gset4
	mov R10,R16
; }
; 
; 
; 
; unsigned char ReadFromCC1020Register(unsigned char addr)
; {
; 
; 	unsigned char itmp;
; 	unsigned char tmp;
; //	P2MDOUT = 0xE0;
; 		DDRD  = 0x30;
	ldi R24,48
	out 0x11,R24
; 		DDRB  = 0X03;
	ldi R24,3
	out 0x17,R24
; 	delay(10);
	ldi R16,10
	ldi R17,0
	ldi R18,0
	ldi R19,0
	rcall _delay
; 	PSEL_0;
	cbi 0x12,5
; 	itmp = (addr&0x7f) <<1 ;
	mov R24,R10
	andi R24,127
	mov R12,R24
	lsl R12
	ldi R24,8
	mov R10,R24
	rjmp L141
L138:
; 	for(tmp=8;tmp>0;tmp--){
; 		Pclk_0;
	cbi 0x18,1
; 		if((itmp&0x80) == 0x80) PData_1;
	mov R24,R12
	andi R24,128
	cpi R24,128
	brne L142
	sbi 0x18,0
	rjmp L143
L142:
; 		else         			PData_0;
	cbi 0x18,0
L143:
	ldi R16,10
	ldi R17,0
	ldi R18,0
	ldi R19,0
	rcall _delay
	sbi 0x18,1
	ldi R16,10
	ldi R17,0
	ldi R18,0
	ldi R19,0
	rcall _delay
	lsl R12
L139:
	dec R10
L141:
	clr R2
	cp R2,R10
	brlo L138
; 		delay(10);
; 		Pclk_1;
; 		delay(10);
; 		itmp = itmp<<1;
; 	}
; 	itmp = 0;
	clr R12
; //	P2MDOUT = 0xA0;
; 	
; 	PData_1;
	sbi 0x18,0
; 	DDRB  = 0X02;

⌨️ 快捷键说明

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