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

📄 cw1.s

📁 实现无线控制功能
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module cw1.c
	.area data(ram, con, rel)
_data::
	.blkb 4
	.area idata
	.word 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbsym e data _data l
_forward::
	.blkb 2
	.area idata
	.byte 0,127
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 127,255
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 255,251
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 127,255
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 255,255
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 253,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbsym e forward _forward A[14:14]c
_back::
	.blkb 2
	.area idata
	.byte 0,127
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 127,255
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 255,253
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 127,255
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 255,255
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 253,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbsym e back _back A[14:14]c
_UP::
	.blkb 2
	.area idata
	.byte 255,1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,8
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,47
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 1
	.area idata
	.byte 56
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbsym e UP _UP A[7:7]c
_DOWN::
	.blkb 2
	.area idata
	.byte 255,1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,16
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,47
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 1
	.area idata
	.byte 64
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbsym e DOWN _DOWN A[7:7]c
_left::
	.blkb 2
	.area idata
	.byte 255,1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,4
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 63,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 1
	.area idata
	.byte 'D
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbsym e left _left A[7:7]c
_right::
	.blkb 2
	.area idata
	.byte 255,1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,2
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 63,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 1
	.area idata
	.byte 'B
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbsym e right _right A[7:7]c
_STOP::
	.blkb 2
	.area idata
	.byte 255,1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.blkb 1
	.area idata
	.byte 1
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbsym e STOP _STOP A[7:7]c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbfunc e delay_ms _delay_ms fV
;              i -> R16,R17
	.even
_delay_ms::
	.dbline -1
	.dbline 23
; #include "iom32v.h"
; #include "macros.h"
; #define wuxian_js    PA3 //无线接收
; #define power_led    PC6 //电源指示灯
; #define study_key    PC1  //学习键
; #define   UDRE  5	     //发送缓冲区为空
; #define   DATA_REGISTER_EMPTY        (1<<UDRE)
; #define  uchar  unsigned char
; #define  ulong  unsigned long
; ulong    count,count1;  //定时器2计数器
; uchar    code[3],code1[3];
; ulong data=0;
; uchar forward[14]={0x00,0x7f,0x7f,0xff,0xff,0xfb,0x00,0x00,0x7f,
;                     0xff,0xff,0xff,0xfd,0x00};
; uchar back[14]={0x00,0x7f,0x7f,0xff,0xff,0xfd,0x00,0x00,0x7f,0xff,
;                      0xff,0xff,0xfd,0x00};
; uchar UP[7]={0xff,0x01,0x00,0x08,0x00,0x2f,0x38};
; uchar DOWN[7]={0xff,0x01,0x00,0x10,0x00,0x2f,0x40};
; uchar left[7]={0xff,0x01,0x00,0x04,0x3f,0x00,0x44}; 
; uchar right[7]={0xff,0x01,0x00,0x02,0x3f,0x00,0x42};
; uchar STOP[7]={0xff,0x01,0x00,0x00,0x00,0x00,0x01};
; void delay_ms(void)                         //毫秒延时  
; {     
	.dbline 25
;      unsigned int i; 
;      for (i=0;i<140;i++)  
	clr R16
	clr R17
	xjmp L5
L2:
	.dbline 26
	.dbline 27
L3:
	.dbline 25
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 25
	cpi R16,140
	ldi R30,0
	cpc R17,R30
	brlo L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nms::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 31
;           { 
;           } 
; } 
; 
; void delay_nms(unsigned int n)              //延时周期 
; { 
	.dbline 33
;      unsigned int i; 
;      for (i=0;i<n;i++) 
	clr R20
	clr R21
	xjmp L10
L7:
	.dbline 34
	.dbline 35
	xcall _delay_ms
	.dbline 36
L8:
	.dbline 33
	subi R20,255  ; offset = 1
	sbci R21,255
L10:
	.dbline 33
	cp R20,R22
	cpc R21,R23
	brlo L7
	.dbline -2
L6:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 39
;           { 
;            delay_ms(); 
;           } 
; } 
; void  port_init(void)
;       {
	.dbline 40
; 	   PORTA = 0xff;
	ldi R24,255
	out 0x1b,R24
	.dbline 41
;        DDRA  = 0x00;
	clr R2
	out 0x1a,R2
	.dbline 42
;        PORTB = 0x00;
	out 0x18,R2
	.dbline 43
;        DDRB  = 0x00;
	out 0x17,R2
	.dbline 44
;        PORTC = 0x01; //m103 output only
	ldi R24,1
	out 0x15,R24
	.dbline 45
;        DDRC  = 0x00;
	out 0x14,R2
	.dbline 46
;        PORTD = 0x00;
	out 0x12,R2
	.dbline 47
;        DDRD  = 0x00; 
	out 0x11,R2
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 50
; 	  }
; void uart0_init(void)
;       {
	.dbline 51
;        UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 52
;        UCSRA = 0x00;
	out 0xb,R2
	.dbline 53
;        UCSRC = BIT(URSEL) | 0x06;
	ldi R24,134
	out 0x20,R24
	.dbline 54
;        UBRRL = 0x67; //set baud rate lo6719
	ldi R24,103
	out 0x9,R24
	.dbline 55
;        UBRRH = 0x00; //set baud rate hi
	out 0x20,R2
	.dbline 56
;        UCSRB = 0x08;
	ldi R24,8
	out 0xa,R24
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_transmit_byte _uart_transmit_byte fV
;           data -> R16
	.even
_uart_transmit_byte::
	.dbline -1
	.dbline 60
;       }    
; //发送单字节字符
; void  uart_transmit_byte( unsigned char data)
;      {
L14:
	.dbline 61
L15:
	.dbline 61
;        while(!(UCSRA&DATA_REGISTER_EMPTY));
	sbis 0xb,5
	rjmp L14
	.dbline 62
;        UDR=data;
	out 0xc,R16
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 69
;      }	
; 	 
; //TIMER2 initialize - prescale:8
; // desired value: 100uSec
; // actual value: 100.000uSec (0.0%)
; void timer2_init(void)
; {
	.dbline 70
;  TCCR2 = 0x00; //stop
	clr R2
	out 0x25,R2
	.dbline 71
;  ASSR  = 0x00; //set async mode
	out 0x22,R2
	.dbline 72
;  TCNT2 = 0xCE; //setup
	ldi R24,206
	out 0x24,R24
	.dbline 73
;  OCR2  = 0x32;
	ldi R24,50
	out 0x23,R24
	.dbline 74
;  TCCR2 = 0x02; //start
	ldi R24,2
	out 0x25,R24
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 20
	jmp _timer2_ovf_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\无线视频车\程序\cw1.c
	.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
	.even
_timer2_ovf_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R24
	st -y,R30
	in R0,0x3f
	st -y,R0
	xcall push_gset2
	.dbline -1
	.dbline 79
; }
; 
; #pragma interrupt_handler timer2_ovf_isr:6
; void timer2_ovf_isr(void)
; {
	.dbline 80
;  TCNT2 = 0xCE; //reload counter value
	ldi R24,206
	out 0x24,R24
	.dbline 81
;  if(count<65535){++count;}
	ldi R20,255
	ldi R21,255
	ldi R22,0
	ldi R23,0
	lds R4,_count+2
	lds R5,_count+2+1
	lds R2,_count
	lds R3,_count+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brsh L19
	.dbline 81
	.dbline 81
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _count+1,R3
	sts _count,R2
	sts _count+2+1,R5
	sts _count+2,R4
	.dbline 81
L19:
	.dbline 82
	ldi R20,255
	ldi R21,255
	ldi R22,0
	ldi R23,0
	lds R4,_count1+2
	lds R5,_count1+2+1
	lds R2,_count1
	lds R3,_count1+1
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brsh L21
	.dbline 82
	.dbline 82
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _count1+1,R3
	sts _count1,R2
	sts _count1+2+1,R5
	sts _count1+2,R4
	.dbline 82
L21:
	.dbline -2
L18:
	xcall pop_gset2
	ld R0,y+
	out 0x3f,R0
	ld R30,y+
	ld R24,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e eeprom_writ _eeprom_writ fV
;             sj -> R18
;             dz -> R16
	.even
_eeprom_writ::
	.dbline -1
	.dbline 86
;  if(count1<65535){++count1;}
; }  
; //==============================================================================
; void eeprom_writ(uchar dz,uchar sj) //写EEPROM  
; {
	.dbline 87
;      CLI(); //清总中断
	cli
L24:
	.dbline 88
	.dbline 88
	.dbline 88
L25:
	.dbline 88
; 	 while(EECR & (1<<EEWE)){;}
	sbic 0x1c,1
	rjmp L24
	.dbline 89
; 	 EEARH=0x00;
	clr R2
	out 0x1f,R2
	.dbline 90
; 	 EEARL=dz;
	out 0x1e,R16
	.dbline 91
; 	 EEDR=sj;
	out 0x1d,R18
	.dbline 92
; 	 EECR |= (1<<EEMWE);
	sbi 0x1c,2
	.dbline 93
; 	 EECR |= (1<<EEWE);
	sbi 0x1c,1
	.dbline 94
;      SEI();
	sei
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbsym r sj 18 c
	.dbsym r dz 16 c
	.dbend
	.dbfunc e eeprom_read _eeprom_read fc
;             dz -> R16
	.even
_eeprom_read::
	.dbline -1
	.dbline 98
; }
; //==============================================================================
; uchar eeprom_read(uchar dz)     //读EEPROM
; {
	.dbline 99
;     CLI(); //清总中断
	cli
L28:
	.dbline 100
	.dbline 100
	.dbline 100
L29:
	.dbline 100
; 	while(EECR & (1<<EEWE)){;}
	sbic 0x1c,1
	rjmp L28
	.dbline 101
; 	EEARH=0x00;
	clr R2
	out 0x1f,R2
	.dbline 102
; 	EEARL=dz;
	out 0x1e,R16
	.dbline 103
; 	EECR |= (1<<EERE);
	sbi 0x1c,0
	.dbline 104
; 	SEI();
	sei
	.dbline 105
; 	return(EEDR); 
	in R16,0x1d
	.dbline -2
L27:
	.dbline 0 ; func end
	ret
	.dbsym r dz 16 c
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 108
; }  
; void init_devices(void)
; {
	.dbline 110
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 111
;  port_init();
	xcall _port_init
	.dbline 112
;  timer2_init();
	xcall _timer2_init
	.dbline 113
;  uart0_init();
	xcall _uart0_init

⌨️ 快捷键说明

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