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

📄 1.s

📁 在车头有4个光敏电阻做的寻找光源的小车程序 具有笔战功能 ICC-AVR ATmega16L 做的控制器 找到光源后停车
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module _1.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
_tab::
	.blkb 2
	.area idata
	.byte 48,49
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.blkb 2
	.area idata
	.byte 50,51
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.blkb 2
	.area idata
	.byte 52,53
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.blkb 2
	.area idata
	.byte 54,55
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.blkb 2
	.area idata
	.byte 56,57
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\lcd.h
	.dbsym e tab _tab A[10:10]c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\lcd.h
	.dbfunc e LCD_init _LCD_init fV
	.even
_LCD_init::
	.dbline -1
	.dbline 34
; 
; #define LCD_EN_PORT    PORTB   //以下2个要设为同一个口
; #define LCD_EN_DDR     DDRB
; #define LCD_RS_PORT    PORTB   //以下2个要设为同一个口
; #define LCD_RS_DDR     DDRB
; #define LCD_DATA_PORT  PORTB  //以下3个要设为同一个口
; #define LCD_DATA_DDR   DDRB   //一定要用高4位
; #define LCD_DATA_PIN   PINB
; 
; #define LCD_RS         (1<<PB7) //0x80   portB7       out 
; #define LCD_EN         (1<<PB6) //0x60   portB6       out 
; #define LCD_DATA       ((1<<PB5)|(1<<PB4)|(1<<PB3)|(1<<PB2)) 
; 
; unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'};
; /*--------------------------------------------------------------------------------------------------
; 函数声明    
; --------------------------------------------------------------------------------------------------*/
; void LCD_init(void);
; void LCD_en_write(void);
; void LCD_write_command(unsigned  char command) ;
; void LCD_write_data(unsigned char data);
; void LCD_set_xy (unsigned char x, unsigned char y);
; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
; void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data);
; 
; /*补充*/
; void LCD_write_shu(unsigned int x,unsigned int t,unsigned int n);
; /*补充*/
; 
; void delay_nus(unsigned int n);
; void delay_nms(unsigned int n);
; 
; void LCD_init(void)         //液晶初始化
; {
	.dbline 35
;   LCD_DATA_DDR|=LCD_DATA;   //数据口方向为输出
	in R24,0x17
	ori R24,60
	out 0x17,R24
	.dbline 36
;   LCD_EN_DDR|=LCD_EN;       //设置EN方向为输出
	sbi 0x17,6
	.dbline 37
;   LCD_RS_DDR|=LCD_RS;       //设置RS方向为输出
	sbi 0x17,7
	.dbline 38
;   LCD_write_command(0x28); 
	ldi R16,40
	xcall _LCD_write_command
	.dbline 39
;   LCD_en_write();
	xcall _LCD_en_write
	.dbline 40
;   delay_nus(40);
	ldi R16,40
	ldi R17,0
	xcall _delay_nus
	.dbline 41
;   LCD_write_command(0x28);  //4位显示
	ldi R16,40
	xcall _LCD_write_command
	.dbline 42
;   LCD_write_command(0x0c);  //显示开
	ldi R16,12
	xcall _LCD_write_command
	.dbline 43
;   LCD_write_command(0x01);  //清屏
	ldi R16,1
	xcall _LCD_write_command
	.dbline 44
;   delay_nms(2);
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_en_write _LCD_en_write fV
	.even
_LCD_en_write::
	.dbline -1
	.dbline 48
; }
; 
; void LCD_en_write(void)  //液晶使能
; {
	.dbline 49
;   LCD_EN_PORT|=LCD_EN;
	sbi 0x18,6
	.dbline 50
;   delay_nus(1);
	ldi R16,1
	ldi R17,0
	xcall _delay_nus
	.dbline 51
;   LCD_EN_PORT&=~LCD_EN;
	cbi 0x18,6
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_write_command _LCD_write_command fV
;           temp -> R22
;        command -> R20
	.even
_LCD_write_command::
	st -y,R20
	st -y,R22
	mov R20,R16
	.dbline -1
	.dbline 55
; }
; 
; void LCD_write_command(unsigned char command) //写指令 
; { 
	.dbline 57
;   unsigned char temp;
;   command=((command&0b10000000)>>7)|((command&0b01000000)>>5)|((command&0b00100000)>>3)|((command&0b00010000)>>1)|((command&0b00001000)<<1)|((command&0b00000100)<<3)|((command&0b00000010)<<5)|((command&0b00000001)<<7);
	mov R24,R20
	andi R24,64
	mov R2,R24
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	mov R24,R20
	andi R24,128
	mov R3,R24
	lsr R3
	lsr R3
	lsr R3
	lsr R3
	lsr R3
	lsr R3
	lsr R3
	or R3,R2
	mov R24,R20
	andi R24,32
	lsr R24
	lsr R24
	lsr R24
	or R3,R24
	mov R24,R20
	andi R24,16
	lsr R24
	or R3,R24
	mov R24,R20
	andi R24,8
	lsl R24
	or R3,R24
	mov R24,R20
	andi R24,4
	lsl R24
	lsl R24
	lsl R24
	or R3,R24
	mov R24,R20
	andi R24,2
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	or R3,R24
	mov R24,R20
	andi R24,1
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	or R3,R24
	mov R20,R3
	.dbline 58
;   delay_nus(16);
	ldi R16,16
	ldi R17,0
	xcall _delay_nus
	.dbline 59
;   temp=command<<2; 
	mov R22,R20
	lsl R22
	lsl R22
	.dbline 60
;   LCD_RS_PORT&=~LCD_RS;        //RS=0 
	cbi 0x18,7
	.dbline 61
;   LCD_DATA_PORT&=0b11000011;         //清高四位 
	in R24,0x18
	andi R24,195
	out 0x18,R24
	.dbline 62
;   LCD_DATA_PORT|=temp&0b00111100; //写高四位 
	mov R24,R22
	andi R24,60
	in R2,0x18
	or R2,R24
	out 0x18,R2
	.dbline 63
;   LCD_en_write(); 
	xcall _LCD_en_write
	.dbline 64
;   command=command>>2;          //低四位移到高四位 
	lsr R20
	lsr R20
	.dbline 65
;   LCD_DATA_PORT&=0b11000011;         //清高四位 
	in R24,0x18
	andi R24,195
	out 0x18,R24
	.dbline 66
;   LCD_DATA_PORT|=command&0b00111100; //写低四位 
	mov R24,R20
	andi R24,60
	in R2,0x18
	or R2,R24
	out 0x18,R2
	.dbline 67
;   LCD_en_write(); 
	xcall _LCD_en_write
	.dbline -2
L3:
	.dbline 0 ; func end
	ld R22,y+
	ld R20,y+
	ret
	.dbsym r temp 22 c
	.dbsym r command 20 c
	.dbend
	.dbfunc e LCD_write_data _LCD_write_data fV
;           temp -> R22
;           data -> R20
	.even
_LCD_write_data::
	st -y,R20
	st -y,R22
	mov R20,R16
	.dbline -1
	.dbline 72
;    
; } 
; 
; void LCD_write_data(unsigned char data) //写数据 
; { 
	.dbline 74
;   unsigned char temp;
;   data=((data&0b10000000)>>7)|((data&0b01000000)>>5)|((data&0b00100000)>>3)|((data&0b00010000)>>1)|((data&0b00001000)<<1)|((data&0b00000100)<<3)|((data&0b00000010)<<5)|((data&0b00000001)<<7);
	mov R24,R20
	andi R24,64
	mov R2,R24
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	lsr R2
	mov R24,R20
	andi R24,128
	mov R3,R24
	lsr R3
	lsr R3
	lsr R3
	lsr R3
	lsr R3
	lsr R3
	lsr R3
	or R3,R2
	mov R24,R20
	andi R24,32
	lsr R24
	lsr R24
	lsr R24
	or R3,R24
	mov R24,R20
	andi R24,16
	lsr R24
	or R3,R24
	mov R24,R20
	andi R24,8
	lsl R24
	or R3,R24
	mov R24,R20
	andi R24,4
	lsl R24
	lsl R24
	lsl R24
	or R3,R24
	mov R24,R20
	andi R24,2
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	or R3,R24
	mov R24,R20
	andi R24,1
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	lsl R24
	or R3,R24
	mov R20,R3
	.dbline 75
;   delay_nus(16); 
	ldi R16,16
	ldi R17,0
	xcall _delay_nus
	.dbline 76
;   temp=data<<2;
	mov R22,R20
	lsl R22
	lsl R22
	.dbline 77
;   LCD_RS_PORT|=LCD_RS;       //RS=1 
	sbi 0x18,7
	.dbline 78
;   LCD_DATA_PORT&=0b11000011;       //清高四位 
	in R24,0x18
	andi R24,195
	out 0x18,R24
	.dbline 79
;   LCD_DATA_PORT|=temp&0b00111100;  //写高四位 
	mov R24,R22
	andi R24,60
	in R2,0x18
	or R2,R24
	out 0x18,R2
	.dbline 80
;   LCD_en_write(); 
	xcall _LCD_en_write
	.dbline 81
;   data=data>>2;               //低四位移到高四位 
	lsr R20
	lsr R20
	.dbline 82
;   LCD_DATA_PORT&=0b11000011;        //清高四位 
	in R24,0x18
	andi R24,195
	out 0x18,R24
	.dbline 83
;   LCD_DATA_PORT|=data&0b00111100;   //写低四位 
	mov R24,R20
	andi R24,60
	in R2,0x18
	or R2,R24
	out 0x18,R2
	.dbline 84
;   LCD_en_write(); 
	xcall _LCD_en_write
	.dbline -2
L4:
	.dbline 0 ; func end
	ld R22,y+
	ld R20,y+
	ret
	.dbsym r temp 22 c
	.dbsym r data 20 c
	.dbend
	.dbfunc e LCD_set_xy _LCD_set_xy fV
;        address -> R20
;              y -> R10
;              x -> R22
	.even
_LCD_set_xy::
	xcall push_xgsetF00C
	mov R10,R18
	mov R22,R16
	.dbline -1
	.dbline 89
; }
; 
; 
; void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
; {
	.dbline 91
;     unsigned char address;
;     if (y == 0) address = 0x80 + x;
	tst R10
	brne L6
X0:
	.dbline 91
	mov R20,R22
	subi R20,128    ; addi 128
	xjmp L7
L6:
	.dbline 92
;     else   address = 0xc0 + x;
	mov R20,R22
	subi R20,64    ; addi 192
L7:
	.dbline 93
;     LCD_write_command( address);
	mov R16,R20
	xcall _LCD_write_command
	.dbline -2
L5:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r address 20 c
	.dbsym r y 10 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e LCD_write_string _LCD_write_string fV
;              s -> R20,R21
;              Y -> R12
;              X -> R10
	.even
_LCD_write_string::
	xcall push_xgset303C
	mov R12,R18
	mov R10,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 97
; }
;   
; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1
; {
	.dbline 98
;     LCD_set_xy( X, Y ); //写地址    
	mov R18,R12
	mov R16,R10
	xcall _LCD_set_xy
	xjmp L10
L9:
	.dbline 100
;     while (*s)  // 写显示字符
;     {
	.dbline 101
;       LCD_write_data( *s );
	movw R30,R20
	ldd R16,z+0
	xcall _LCD_write_data
	.dbline 102
;       s ++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 103
;     }
L10:
	.dbline 99
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L9
X1:
	.dbline -2
L8:
	.dbline 0 ; func end
	xjmp pop_xgset303C
	.dbsym r s 20 pc
	.dbsym r Y 12 c
	.dbsym r X 10 c
	.dbend
	.dbfunc e LCD_write_char _LCD_write_char fV
;           data -> y+2
;              Y -> R12
;              X -> R10
	.even
_LCD_write_char::
	st -y,R10
	st -y,R12
	mov R12,R18
	mov R10,R16
	.dbline -1
	.dbline 108
;       
; }
; 
; void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
; {
	.dbline 109
;   LCD_set_xy( X, Y ); //写地址
	mov R18,R12
	mov R16,R10
	xcall _LCD_set_xy
	.dbline 110
;   LCD_write_data( data);
	ldd R16,y+2
	xcall _LCD_write_data
	.dbline -2
L12:
	.dbline 0 ; func end
	ld R12,y+
	ld R10,y+
	ret
	.dbsym l data 2 c
	.dbsym r Y 12 c
	.dbsym r X 10 c
	.dbend
	.dbfunc e delay_1us _delay_1us fV
	.even
_delay_1us::
	.dbline -1
	.dbline 116
; }
; 
; 
; 
; void delay_1us(void)                 //1us延时函数
;   {
	.dbline 117
;    asm("nop");
	nop
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R10,R11
	.even
_delay_nus::
	xcall push_xgset300C
	movw R10,R16
	.dbline -1
	.dbline 121
;   }
; 
; void delay_nus(unsigned int n)       //N us延时函数
;   {
	.dbline 122
;    unsigned int i=0;
	clr R20
	clr R21
	.dbline 123
;    for (i=0;i<n;i++)
	xjmp L18
L15:
	.dbline 124
;    delay_1us();
	xcall _delay_1us
L16:
	.dbline 123
	subi R20,255  ; offset = 1
	sbci R21,255
L18:
	.dbline 123
	cp R20,R10
	cpc R21,R11
	brlo L15
X2:
	.dbline -2
L14:
	.dbline 0 ; func end
	xjmp pop_xgset300C
	.dbsym r i 20 i
	.dbsym r n 10 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 128
;   }
;   
; void delay_1ms(void)                 //1ms延时函数
;   {
	.dbline 130
;    unsigned int i;
;    for (i=0;i<1140;i++);
	clr R16
	clr R17
	xjmp L23
L20:
	.dbline 130
L21:
	.dbline 130
	subi R16,255  ; offset = 1
	sbci R17,255
L23:
	.dbline 130
	cpi R16,116
	ldi R30,4
	cpc R17,R30
	brlo L20
X3:
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R10,R11
	.even
_delay_nms::
	xcall push_xgset300C
	movw R10,R16
	.dbline -1
	.dbline 134
;   }
;   
; void delay_nms(unsigned int n)       //N ms延时函数
;   {
	.dbline 135
;    unsigned int i=0;
	clr R20
	clr R21
	.dbline 136
;    for (i=0;i<n;i++)
	xjmp L28
L25:
	.dbline 137
;    delay_1ms();
	xcall _delay_1ms
L26:
	.dbline 136
	subi R20,255  ; offset = 1
	sbci R21,255
L28:
	.dbline 136
	cp R20,R10
	cpc R21,R11
	brlo L25
X4:
	.dbline -2
L24:
	.dbline 0 ; func end
	xjmp pop_xgset300C
	.dbsym r i 20 i
	.dbsym r n 10 i
	.dbend
	.dbfunc e Format _Format fpc
;            str -> R20,R21
;           data -> R10
	.even
_Format::
	xcall push_xgset300C
	movw R20,R18
	mov R10,R16
	.dbline -1
	.dbline 141
;   }
; 
; unsigned char *Format(unsigned char data,unsigned char *str)
; {  
	.dbline 142
;   str[0]=tab[(data/10)%10];
	ldi R18,10
	ldi R19,0
	mov R16,R10
	clr R17
	xcall div16s
	ldi R18,10
	ldi R19,0
	xcall mod16s
	movw R30,R16
	ldi R24,<_tab
	ldi R25,>_tab
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R30,R20
	std z+0,R2
	.dbline 143
;   str[1]=tab[data%10];
	ldi R18,10
	ldi R19,0
	mov R16,R10
	clr R17
	xcall mod16s
	movw R30,R16
	ldi R24,<_tab
	ldi R25,>_tab
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R30,R20
	std z+1,R2
	.dbline 144
;   return str; 
	movw R16,R30
	.dbline -2
L29:
	.dbline 0 ; func end
	xjmp pop_xgset300C
	.dbsym r str 20 pc
	.dbsym r data 10 c
	.dbend
	.dbfunc e LCD_write_shu _LCD_write_shu fV
;            wei -> R12,R13
;            shi -> R14,R15
;            bai -> R22,R23
;           qian -> R20,R21
;            wan -> R10,R11
;              n -> R12,R13
;              t -> y+13
;              x -> y+11
	.even
_LCD_write_shu::
	xcall push_arg4
	xcall push_xgsetF0FC
	sbiw R28,1
	ldd R12,y+15
	ldd R13,y+16
	.dbline -1
	.dbline 148
;  }
; 
; void LCD_write_shu(unsigned int x,unsigned int t,unsigned int n)
; {
	.dbline 154
;   unsigned int wan;
;   unsigned int qian;
;   unsigned int bai;
;   unsigned int shi;
;   unsigned int wei;
;   wan=n/10000;
	ldi R18,10000
	ldi R19,39
	movw R16,R12
	xcall div16u
	movw R10,R16
	.dbline 155
;   qian=(n-wan*10000)/1000;
	ldi R16,10000
	ldi R17,39
	movw R18,R10
	xcall empy16s
	movw R2,R16
	movw R16,R12
	sub R16,R2
	sbc R17,R3
	ldi R18,1000
	ldi R19,3
	xcall div16u
	movw R20,R16
	.dbline 156
;   bai=(n-wan*10000-qian*1000)/100;
	ldi R16,10000
	ldi R17,39
	movw R18,R10
	xcall empy16s
	movw R2,R12
	sub R2,R16
	sbc R3,R17
	ldi R16,1000
	ldi R17,3
	movw R18,R20
	xcall empy16s
	sub R2,R16
	sbc R3,R17
	ldi R18,100
	ldi R19,0
	movw R16,R2
	xcall div16u
	movw R22,R16
	.dbline 157
;   shi=(n-wan*10000-qian*1000-bai*100)/10;
	ldi R16,10000
	ldi R17,39
	movw R18,R10
	xcall empy16s
	movw R2,R12
	sub R2,R16
	sbc R3,R17
	ldi R16,1000
	ldi R17,3
	movw R18,R20
	xcall empy16s
	sub R2,R16
	sbc R3,R17
	ldi R16,100
	ldi R17,0
	movw R18,R22
	xcall empy16s
	sub R2,R16
	sbc R3,R17
	ldi R18,10
	ldi R19,0
	movw R16,R2
	xcall div16u
	movw R14,R16
	.dbline 158
;   wei=(n-wan*10000-qian*1000-bai*100-shi*10);
	ldi R16,10000
	ldi R17,39
	movw R18,R10
	xcall empy16s
	movw R2,R12
	sub R2,R16
	sbc R3,R17
	ldi R16,1000
	ldi R17,3
	movw R18,R20
	xcall empy16s

⌨️ 快捷键说明

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