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

📄 shiyan.s

📁 电机的不同转动轻快
💻 S
字号:
	.module shiyan.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\徐胜辉\桌面\新建文件夹\shiyan.c
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\徐胜辉\桌面\新建文件夹\shiyan.c
_dispcode::
	.blkb 17
	.area idata
	.byte 48,49,50,51,52,53,54,55,56,57,'A,'B,'C,'D,'E,'F
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\徐胜辉\桌面\新建文件夹\shiyan.c
	.dbsym e dispcode _dispcode A[17:17]c
_str1::
	.blkb 12
	.area idata
	.byte 'n,'u,'m,'b,'e,'r,32,'i,'s,58,32,0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\徐胜辉\桌面\新建文件夹\shiyan.c
	.dbsym e str1 _str1 A[12:12]c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\徐胜辉\桌面\新建文件夹\shiyan.c
	.dbfunc e delay1ms _delay1ms fV
;              j -> R20,R21
;              i -> R16,R17
	.even
_delay1ms::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 15
; #include<iom16v.h>
; #define uchar unsigned char
; #define uint unsigned int
; #define RS_1 PORTA|=(1<<3)
; #define RS_0 PORTA&=~(1<<3)
; #define RW_1 PORTA|=(1<<4)
; #define RW_0 PORTA&=~(1<<4)
; #define EN_1 PORTA|=(1<<5)
; #define EN_0 PORTA&=~(1<<5)
; unsigned char  dispcode[]="0123456789ABCDEF";
;  unsigned char  str1[]={"number is: "};
; 
; /*************************lcd1602程序**************************/
; void delay1ms(uint i)//延时1毫秒(不够精确的)
; {
	.dbline 17
;   unsigned int j;
;   for(;i>0;i--)
	xjmp L5
L2:
	.dbline 18
;   for(j=0;j<1142;j++);
	clr R20
	clr R21
	xjmp L9
L6:
	.dbline 18
L7:
	.dbline 18
	subi R20,255  ; offset = 1
	sbci R21,255
L9:
	.dbline 18
	cpi R20,118
	ldi R30,4
	cpc R21,R30
	brlo L6
X0:
L3:
	.dbline 17
	subi R16,1
	sbci R17,0
L5:
	.dbline 17
	cpi R16,0
	cpc R16,R17
	brne L2
X1:
	.dbline -2
L1:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r j 20 i
	.dbsym r i 16 i
	.dbend
	.dbfunc e wr_com _wr_com fV
;            com -> R10
	.even
_wr_com::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 21
; }
; void wr_com(unsigned char com)//写指令//
; {
	.dbline 22
;    delay1ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay1ms
	.dbline 23
;    RS_0;
	cbi 0x1b,3
	.dbline 24
;    RW_0;
	cbi 0x1b,4
	.dbline 25
;    EN_0;
	cbi 0x1b,5
	.dbline 26
;    PORTB=com;
	out 0x18,R10
	.dbline 27
;    delay1ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay1ms
	.dbline 28
;    EN_1;
	sbi 0x1b,5
	.dbline 29
;    delay1ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay1ms
	.dbline 30
;    EN_0;
	cbi 0x1b,5
	.dbline -2
L10:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r com 10 c
	.dbend
	.dbfunc e wr_dat _wr_dat fV
;            dat -> R10
	.even
_wr_dat::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 33
; }
; void wr_dat(unsigned char dat)//写数据//
; {
	.dbline 34
;   delay1ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay1ms
	.dbline 35
;    RS_1;
	sbi 0x1b,3
	.dbline 36
;    RW_0;
	cbi 0x1b,4
	.dbline 37
;    EN_0;
	cbi 0x1b,5
	.dbline 38
;    PORTB=dat;
	out 0x18,R10
	.dbline 39
;    delay1ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay1ms
	.dbline 40
;    EN_1;
	sbi 0x1b,5
	.dbline 41
;    delay1ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay1ms
	.dbline 42
;    EN_0;
	cbi 0x1b,5
	.dbline -2
L11:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r dat 10 c
	.dbend
	.dbfunc e lcd_init _lcd_init fV
	.even
_lcd_init::
	.dbline -1
	.dbline 45
; }
; void lcd_init()//初始化设置//
; {
	.dbline 46
;    DDRB|=0xFF;      /*I/O口方向设置*/
	in R24,0x17
	ori R24,255
	out 0x17,R24
	.dbline 47
;  DDRA|=(1<<3)|(1<<4)|(1<<5);
	in R24,0x1a
	ori R24,56
	out 0x1a,R24
	.dbline 48
;  delay1ms(15);
	ldi R16,15
	ldi R17,0
	xcall _delay1ms
	.dbline 49
;   wr_com(0x38);delay1ms(5);
	ldi R16,56
	xcall _wr_com
	.dbline 49
	ldi R16,5
	ldi R17,0
	xcall _delay1ms
	.dbline 50
;    wr_com(0x08);delay1ms(5);
	ldi R16,8
	xcall _wr_com
	.dbline 50
	ldi R16,5
	ldi R17,0
	xcall _delay1ms
	.dbline 51
;     wr_com(0x01);delay1ms(5);
	ldi R16,1
	xcall _wr_com
	.dbline 51
	ldi R16,5
	ldi R17,0
	xcall _delay1ms
	.dbline 52
;      wr_com(0x06);delay1ms(5);
	ldi R16,6
	xcall _wr_com
	.dbline 52
	ldi R16,5
	ldi R17,0
	xcall _delay1ms
	.dbline 53
;       wr_com(0x0c);delay1ms(5);
	ldi R16,12
	xcall _wr_com
	.dbline 53
	ldi R16,5
	ldi R17,0
	xcall _delay1ms
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e display _display fV
;              p -> R20,R21
	.even
_display::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 57
; }
; 
; void display(unsigned char *p)//显示//
; {
	xjmp L15
L14:
	.dbline 59
; while(*p!='\0')
; {
	.dbline 60
; wr_dat(*p);
	movw R30,R20
	ldd R16,z+0
	xcall _wr_dat
	.dbline 61
; p++;
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 62
; delay1ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay1ms
	.dbline 63
; }
L15:
	.dbline 58
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L14
X2:
	.dbline -2
L13:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r p 20 pc
	.dbend
	.dbfunc e delay_18B20 _delay_18B20 fV
;           time -> R16,R17
	.even
_delay_18B20::
	.dbline -1
	.dbline 68
; }
; 
; /******************************ds1820程序***************************************/
; void delay_18B20(int time)
; {
L18:
	.dbline 70
; do
; time--;
	subi R16,1
	sbci R17,0
L19:
	.dbline 71
; while(time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L18
X3:
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend
	.dbfunc e ds1820rst _ds1820rst fc
;            ack -> R20
	.even
_ds1820rst::
	st -y,R20
	.dbline -1
	.dbline 74
; }
; unsigned char ds1820rst()/*ds1820复位*/
; {
	.dbline 76
; unsigned char ack;
; DDRA|=0x01;
	sbi 0x1a,0
	.dbline 77
; PORTA&=0xfe;
	in R24,0x1b
	andi R24,254
	out 0x1b,R24
	.dbline 78
; delay_18B20(500);
	ldi R16,500
	ldi R17,1
	xcall _delay_18B20
	.dbline 79
; PORTA|=0x01;
	sbi 0x1b,0
	.dbline 80
; DDRA&=0xfe;
	in R24,0x1a
	andi R24,254
	out 0x1a,R24
	.dbline 81
; delay_18B20(75);
	ldi R16,75
	ldi R17,0
	xcall _delay_18B20
	.dbline 82
; ack=PINA;
	in R20,0x19
	.dbline 83
; ack&=0x01;
	andi R20,1
	.dbline 84
; delay_18B20(500);
	ldi R16,500
	ldi R17,1
	xcall _delay_18B20
	.dbline 85
; return ack;
	mov R16,R20
	.dbline -2
L21:
	.dbline 0 ; func end
	ld R20,y+
	ret
	.dbsym r ack 20 c
	.dbend
	.dbfunc e ds1820rd _ds1820rd fc
;           byte -> R20
;           temp -> R10
;              i -> R22
	.even
_ds1820rd::
	xcall push_xgsetF00C
	.dbline -1
	.dbline 89
;  } 
; 
; unsigned char ds1820rd()/*读数据*/
; { 
	.dbline 91
; unsigned char i,byte,temp;
;   byte=0x00;
	clr R20
	.dbline 92
;   for (i=0;i<8;i++)
	clr R22
	xjmp L26
L23:
	.dbline 93
;  {  
	.dbline 94
;    DDRA|=0x01;
	sbi 0x1a,0
	.dbline 95
;    PORTA&=0xfe;//给脉冲信号
	in R24,0x1b
	andi R24,254
	out 0x1b,R24
	.dbline 96
;    delay_18B20(3); 
	ldi R16,3
	ldi R17,0
	xcall _delay_18B20
	.dbline 97
;    PORTA|=0x01;
	sbi 0x1b,0
	.dbline 98
;    DDRA&=0xfe;
	in R24,0x1a
	andi R24,254
	out 0x1a,R24
	.dbline 99
;    delay_18B20(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_18B20
	.dbline 100
;    temp=(PINA&0x01);
	in R24,0x19
	andi R24,1
	mov R10,R24
	.dbline 101
;    if(temp!=0x00)
	tst R24
	breq L27
X4:
	.dbline 102
;       byte|=0x80;
	ori R20,128
L27:
	.dbline 103
;    if(i<7)
	cpi R22,7
	brsh L29
X5:
	.dbline 104
;       byte=byte>>1;
	lsr R20
L29:
	.dbline 105
;    delay_18B20(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_18B20
	.dbline 106
;    DDRA|=0x01;
	sbi 0x1a,0
	.dbline 107
;    delay_18B20(5);
	ldi R16,5
	ldi R17,0
	xcall _delay_18B20
	.dbline 108
;    }
L24:
	.dbline 92
	inc R22
L26:
	.dbline 92
	cpi R22,8
	brlo L23
X6:
	.dbline 109
;    return byte;
	mov R16,R20
	.dbline -2
L22:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r byte 20 c
	.dbsym r temp 10 c
	.dbsym r i 22 c
	.dbend
	.dbfunc e ds1820wr _ds1820wr fV
;              i -> R22
;              j -> R10
;          wdata -> R20
	.even
_ds1820wr::
	xcall push_xgsetF00C
	mov R20,R16
	.dbline -1
	.dbline 113
; }
; 
; void ds1820wr(uchar wdata)/*写数据*/
;   {
	.dbline 115
;      unsigned char i,j;
; 	  DDRA|=0x01;
	sbi 0x1a,0
	.dbline 116
; 	  for (j=0;j<=7;j++)
	clr R10
	xjmp L35
L32:
	.dbline 117
;    { 
	.dbline 118
;     i=wdata&0x01;
	mov R22,R20
	andi R22,1
	.dbline 119
; 	if(i==0x01)
	cpi R22,1
	brne L36
X7:
	.dbline 120
; 	  {
	.dbline 121
; 	  PORTA&=0xfe;
	in R24,0x1b
	andi R24,254
	out 0x1b,R24
	.dbline 122
; 	  delay_18B20(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_18B20
	.dbline 123
; 	  PORTA|=0x01;
	sbi 0x1b,0
	.dbline 124
; 	   delay_18B20(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_18B20
	.dbline 125
;    }
	xjmp L37
L36:
	.dbline 127
;    else
;    {
	.dbline 128
;      PORTA&=0xfe;
	in R24,0x1b
	andi R24,254
	out 0x1b,R24
	.dbline 129
;      delay_18B20(100);
	ldi R16,100
	ldi R17,0
	xcall _delay_18B20
	.dbline 130
; 	  PORTA|=0x01;
	sbi 0x1b,0
	.dbline 131
; 	  delay_18B20(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_18B20
	.dbline 132
;    }
L37:
	.dbline 133
;    wdata=wdata>>1;
	lsr R20
	.dbline 134
; }
L33:
	.dbline 116
	inc R10
L35:
	.dbline 116
	ldi R24,7
	cp R24,R10
	brsh L32
X8:
	.dbline -2
L31:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r i 22 c
	.dbsym r j 10 c
	.dbsym r wdata 20 c
	.dbend
	.dbfunc e asc2con _asc2con fV
;              i -> R10
;           temp -> R20
;            len -> R12
;              q -> R14,R15
	.even
_asc2con::
	xcall push_xgset30FC
	mov R12,R18
	movw R14,R16
	.dbline -1
	.dbline 138
;  } 
;  /************将十六进制转换成ASCII码,并送LCD显示****************/
; void asc2con(unsigned char *q,unsigned char len)
; {
	.dbline 140
; unsigned char temp,i;
; wr_com(0xc0);
	ldi R16,192
	xcall _wr_com
	.dbline 141
; for(i=0;i<len;i++)
	clr R10
	xjmp L42
L39:
	.dbline 142
; {
	.dbline 143
; temp=q[len-1-i]&0xf0;
	mov R2,R10
	clr R3
	mov R30,R12
	clr R31
	sbiw R30,1
	sub R30,R2
	sbc R31,R3
	add R30,R14
	adc R31,R15
	ldd R20,z+0
	andi R20,240
	.dbline 144
; temp=temp>>4;
	mov R24,R20
	swap R24
	andi R24,#0x0F
	mov R20,R24
	.dbline 145
; wr_dat(dispcode[temp]);
	ldi R24,<_dispcode
	ldi R25,>_dispcode
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _wr_dat
	.dbline 146
; temp=q[len-1-i]&0x0f;
	mov R2,R10
	clr R3
	mov R30,R12
	clr R31
	sbiw R30,1
	sub R30,R2
	sbc R31,R3
	add R30,R14
	adc R31,R15
	ldd R20,z+0
	andi R20,15
	.dbline 147
; wr_dat(dispcode[temp]);
	ldi R24,<_dispcode
	ldi R25,>_dispcode
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _wr_dat
	.dbline 148
; }
L40:
	.dbline 141
	inc R10
L42:
	.dbline 141
	cp R10,R12
	brsh X10
	xjmp L39
X10:
X9:
	.dbline -2
L38:
	.dbline 0 ; func end
	xjmp pop_xgset30FC
	.dbsym r i 10 c
	.dbsym r temp 20 c
	.dbsym r len 12 c
	.dbsym r q 14 pc
	.dbend
	.dbfunc e main _main fV
;              a -> y+0
;              i -> R20
	.even
_main::
	sbiw R28,8
	.dbline -1
	.dbline 152
; }
; /********************主程序***********************************/
;    void main()
;     { 
	.dbline 154
;       unsigned char a[8],i;
;       lcd_init();
	xcall _lcd_init
	.dbline 155
; 	  display(str1);
	ldi R16,<_str1
	ldi R17,>_str1
	xcall _display
	.dbline 156
;       ds1820rst();
	xcall _ds1820rst
	.dbline 157
;      delay1ms(1);
	ldi R16,1
	ldi R17,0
	xcall _delay1ms
	.dbline 158
;      ds1820wr(0x33);
	ldi R16,51
	xcall _ds1820wr
	.dbline 159
;      for(i=0;i<8;i++)
	clr R20
	xjmp L47
L44:
	.dbline 160
;      {
	.dbline 161
;     a[i]=ds1820rd();
	xcall _ds1820rd
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 162
;       }
L45:
	.dbline 159
	inc R20
L47:
	.dbline 159
	cpi R20,8
	brlo L44
X11:
	.dbline 163
;    asc2con(a,8);
	ldi R18,8
	movw R16,R28
	xcall _asc2con
L48:
	.dbline 164
;     while(1);
L49:
	.dbline 164
	xjmp L48
X12:
	.dbline -2
L43:
	.dbline 0 ; func end
	adiw R28,8
	ret
	.dbsym l a 0 A[8:8]c
	.dbsym r i 20 c
	.dbend
;    }

⌨️ 快捷键说明

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