📄 common.lis
字号:
009C ; }
009C ;
009C ;
009C ;
009C ;
009C ;
009C ; //*********************************************************************/
009C ; //*函数名:delay()
009C ; //*函数功能:延时函数
009C ; //*函数说明:无返回值 t为一个延时的时间
009C ; //*设计者: yu 日期:2007-10-20
009C ; //**********************************************************************/
009C ; void delay(int t)
009C ; {
009C .dbline 92
009C ; int i,j ;
009C ; for(i=0;i<t;i++)
009C 4427 clr R20
009E 5527 clr R21
00A0 0AC0 xjmp L10
00A2 L7:
00A2 .dbline 93
00A2 6627 clr R22
00A4 7727 clr R23
00A6 02C0 xjmp L14
00A8 L11:
00A8 .dbline 93
00A8 L12:
00A8 .dbline 93
00A8 6F5F subi R22,255 ; offset = 1
00AA 7F4F sbci R23,255
00AC L14:
00AC .dbline 93
00AC 6017 cp R22,R16
00AE 7107 cpc R23,R17
00B0 DCF3 brlt L11
00B2 L8:
00B2 .dbline 92
00B2 4F5F subi R20,255 ; offset = 1
00B4 5F4F sbci R21,255
00B6 L10:
00B6 .dbline 92
00B6 4017 cp R20,R16
00B8 5107 cpc R21,R17
00BA 9CF3 brlt L7
00BC .dbline -2
00BC L6:
00BC 0E940000 xcall pop_gset2
00C0 .dbline 0 ; func end
00C0 0895 ret
00C2 .dbsym r i 20 I
00C2 .dbsym r j 22 I
00C2 .dbsym r t 16 I
00C2 .dbend
00C2 .dbfunc e led_on_off _led_on_off fV
00C2 ; led_flag -> R16
.even
00C2 _led_on_off::
00C2 .dbline -1
00C2 .dbline 101
00C2 ; for(j=0;j<t;j++);
00C2 ; }
00C2 ;
00C2 ; //////////////////////////////////////////////////////////
00C2 ; /*led_on_off()
00C2 ; /*LED的开和关闭
00C2 ; */
00C2 ; void led_on_off(BYTE led_flag)
00C2 ; {
00C2 .dbline 103
00C2 ; //设置PC0口为输出0,点亮LED
00C2 ; if(led_flag==1)
00C2 0130 cpi R16,1
00C4 39F4 brne L16
00C6 .dbline 104
00C6 ; {
00C6 .dbline 105
00C6 ; PBO.B4=0 ;
00C6 88B3 in R24,0x18
00C8 8F7E andi R24,239
00CA 88BB out 0x18,R24
00CC .dbline 106
00CC ; PBD.B4=1 ;
00CC 87B3 in R24,0x17
00CE 8061 ori R24,16
00D0 87BB out 0x17,R24
00D2 .dbline 107
00D2 ; }
00D2 06C0 xjmp L17
00D4 L16:
00D4 .dbline 110
00D4 .dbline 111
00D4 88B3 in R24,0x18
00D6 8061 ori R24,16
00D8 88BB out 0x18,R24
00DA .dbline 112
00DA 87B3 in R24,0x17
00DC 8061 ori R24,16
00DE 87BB out 0x17,R24
00E0 .dbline 113
00E0 L17:
00E0 .dbline -2
00E0 L15:
00E0 .dbline 0 ; func end
00E0 0895 ret
00E2 .dbsym r led_flag 16 c
00E2 .dbend
00E2 .dbfunc e led_response _led_response fV
00E2 ; i -> R20,R21
00E2 ; t -> R22,R23
.even
00E2 _led_response::
00E2 0E940000 xcall push_gset2
00E6 B801 movw R22,R16
00E8 .dbline -1
00E8 .dbline 117
00E8 ; //设置PC0口为输出1,关闭LED
00E8 ; else
00E8 ; {
00E8 ; PBO.B4=1 ;
00E8 ; PBD.B4=1 ;
00E8 ; }
00E8 ; }
00E8 ;
00E8 ; void led_response (int t)
00E8 ; {
00E8 .dbline 119
00E8 ; int i;
00E8 ; for(i = 0;i < t;i++)
00E8 4427 clr R20
00EA 5527 clr R21
00EC 0CC0 xjmp L22
00EE L19:
00EE .dbline 120
00EE .dbline 121
00EE 01E0 ldi R16,1
00F0 E8DF xcall _led_on_off
00F2 .dbline 122
00F2 06E9 ldi R16,150
00F4 10E0 ldi R17,0
00F6 D0DF xcall _delay
00F8 .dbline 123
00F8 0027 clr R16
00FA E3DF xcall _led_on_off
00FC .dbline 124
00FC 06E9 ldi R16,150
00FE 10E0 ldi R17,0
0100 CBDF xcall _delay
0102 .dbline 125
0102 L20:
0102 .dbline 119
0102 4F5F subi R20,255 ; offset = 1
0104 5F4F sbci R21,255
0106 L22:
0106 .dbline 119
0106 4617 cp R20,R22
0108 5707 cpc R21,R23
010A 8CF3 brlt L19
010C .dbline -2
010C L18:
010C 0E940000 xcall pop_gset2
0110 .dbline 0 ; func end
0110 0895 ret
0112 .dbsym r i 20 I
0112 .dbsym r t 22 I
0112 .dbend
0112 .dbfunc e SPI_MasterInit _SPI_MasterInit fV
.even
0112 _SPI_MasterInit::
0112 .dbline -1
0112 .dbline 129
0112 ; {
0112 ; led_on_off(ON); //点亮LED灯
0112 ; delay(150);
0112 ; led_on_off(OFF); //关闭LED灯
0112 ; delay(150);
0112 ; }
0112 ; }
0112 ;
0112 ; void SPI_MasterInit(void)
0112 ; {
0112 .dbline 131
0112 ; /* 设置MOSI 和SCK 片选为输出,其他为输入 */
0112 ; PORTB |= (1<<PB3) | (1<<PB4) | (1<<PB5) | (1<<PB6);
0112 88B3 in R24,0x18
0114 8867 ori R24,120
0116 88BB out 0x18,R24
0118 .dbline 132
0118 ; DDRB = (1<<DDB2)|(1<<DDB1)|(1<<DDB0);
0118 87E0 ldi R24,7
011A 87BB out 0x17,R24
011C .dbline 134
011C ; /* 使能SPI 主机模式,设置时钟速率为fck/16 */
011C ; SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
011C 81E5 ldi R24,81
011E 8DB9 out 0xd,R24
0120 .dbline -2
0120 L23:
0120 .dbline 0 ; func end
0120 0895 ret
0122 .dbend
0122 .dbfunc e SPI_MasterTransmit _SPI_MasterTransmit fV
0122 ; cData -> R16
.even
0122 _SPI_MasterTransmit::
0122 .dbline -1
0122 .dbline 137
0122 ; }
0122 ; void SPI_MasterTransmit(char cData)
0122 ; {
0122 .dbline 138
0122 ; PORTB &=~ (1<<PB0); //强制接收方进入从模式
0122 C098 cbi 0x18,0
0124 .dbline 139
0124 ; SPCR |= (1<<MSTR); // MSTR有时会被清零,这里强制进入主机模式
0124 6C9A sbi 0xd,4
0126 .dbline 141
0126 ; /* 启动数据传输 */
0126 ; SPDR = cData;
0126 0FB9 out 0xf,R16
0128 L25:
0128 .dbline 143
0128 L26:
0128 .dbline 143
0128 ; /* 等待传输结束 */
0128 ; while(!(SPSR & (1<<SPIF)));
0128 779B sbis 0xe,7
012A FECF rjmp L25
012C .dbline -2
012C L24:
012C .dbline 0 ; func end
012C 0895 ret
012E .dbsym r cData 16 c
012E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -