📄 spi.lis
字号:
.module spi.c
.area text(rom, con, rel)
0000 .dbfile E:\PQ-1A\我的AVR\无线模拟\spi.c
0000 .dbfunc e delayms _delayms fV
0000 ; x -> R20,R21
0000 ; y -> R22,R23
0000 ; z -> R16,R17
.even
0000 _delayms::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 53
0004 ; #include <iom128v.h>
0004 ; #include <iom128.h>
0004 ; #include <macros.h>
0004 ; #include <BIT.h>
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ;
0004 ; #define CSN _PB0
0004 ; #define SCK _PB1
0004 ; #define MOSI _PB2
0004 ; #define MISO READ_PB3
0004 ;
0004 ; /*#define BYTE_BIT0 0x01
0004 ; #define BYTE_BIT1 0x02
0004 ; #define BYTE_BIT2 0x04
0004 ; #define BYTE_BIT3 0x08
0004 ; #define BYTE_BIT4 0x10
0004 ; #define BYTE_BIT5 0x20
0004 ; #define BYTE_BIT6 0x40
0004 ; #define BYTE_BIT7 0x80
0004 ;
0004 ; uchar DATA_BUF;
0004 ; #define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)
0004 ; #define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)
0004 ;
0004 ; /*从最高位到最低位依次是:hafc debg
0004 ; uchar table[]=//这个译码数组0、123467已经改好了! by张强
0004 ; //589也已改好 lly
0004 ; {0x7e, 0x12, 0x4f,0x5b
0004 ; ,0x33, 0x79, 0x7d, 0x52,
0004 ; 0x7f,0x7b};//段选编码*/
0004 ;
0004 ; /*******************************************
0004 ; 函数名称: delayus
0004 ; 功 能: 延时指定微秒(8.31M晶振)
0004 ; 参 数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
0004 ; 返回值 : 无
0004 ; /*******************************************
0004 ; void delayus(uint us)
0004 ; {
0004 ; uint i;
0004 ; us=us*13/10; //13/10是在8.31MHz晶振下,通过软件仿真反复实验得到的数值
0004 ; for( i=0;i<us;i++);
0004 ; } */
0004 ;
0004 ; /*******************************************
0004 ; 函数名称: delay()
0004 ; 功 能: 8.31MHz晶振下延时 z ms
0004 ; 参 数: z
0004 ; 返回值 : 无
0004 ; /********************************************/
0004 ; void delayms(uint z)
0004 ; {
0004 .dbline 55
0004 ; uint x,y;
0004 ; for(x=z;x>0;x--)
0004 A801 movw R20,R16
0006 0AC0 xjmp L5
0008 L2:
0008 .dbline 56
0008 61EA ldi R22,1185
000A 74E0 ldi R23,4
000C 02C0 xjmp L9
000E L6:
000E .dbline 56
000E L7:
000E .dbline 56
000E 6150 subi R22,1
0010 7040 sbci R23,0
0012 L9:
0012 .dbline 56
0012 6030 cpi R22,0
0014 6707 cpc R22,R23
0016 D9F7 brne L6
0018 X0:
0018 L3:
0018 .dbline 55
0018 4150 subi R20,1
001A 5040 sbci R21,0
001C L5:
001C .dbline 55
001C 4030 cpi R20,0
001E 4507 cpc R20,R21
0020 99F7 brne L2
0022 X1:
0022 .dbline -2
0022 .dbline 57
0022 ; for(y=1185;y>0;y--);
0022 ; }
0022 L1:
0022 0E940000 xcall pop_gset2
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r x 20 i
0028 .dbsym r y 22 i
0028 .dbsym r z 16 i
0028 .dbend
0028 .dbfunc e SpiInit _SpiInit fV
.even
0028 _SpiInit::
0028 .dbline -1
0028 .dbline 60
0028 ;
0028 ; void SpiInit(void)
0028 ; {
0028 .dbline 61
0028 ; DDRA=0XFF;
0028 8FEF ldi R24,255
002A 8ABB out 0x1a,R24
002C .dbline 62
002C ; DDRB|=BIT(0)|BIT(1)|BIT(2);
002C 87B3 in R24,0x17
002E 8760 ori R24,7
0030 87BB out 0x17,R24
0032 .dbline 63
0032 ; DDRB&=~BIT(3);
0032 BB98 cbi 0x17,3
0034 .dbline 64
0034 ; PORTB|=BIT(3);
0034 C39A sbi 0x18,3
0036 .dbline 65
0036 ; CSN=1; // Spi disable
0036 88B3 in R24,0x18
0038 8160 ori R24,1
003A 88BB out 0x18,R24
003C .dbline 66
003C ; SCK=0; // Spi clock line init low
003C 88B3 in R24,0x18
003E 8D7F andi R24,253
0040 88BB out 0x18,R24
0042 .dbline -2
0042 .dbline 67
0042 ; }
0042 L10:
0042 .dbline 0 ; func end
0042 0895 ret
0044 .dbend
0044 .dbfunc e main _main fV
0044 ; num -> R20,R21
.even
0044 _main::
0044 .dbline -1
0044 .dbline 113
0044 ; /*
0044 ; unsigned char SpiRead(void)
0044 ; {
0044 ; unsigned char i;
0044 ; for (i=0;i<8;i++)
0044 ; {
0044 ; DATA_BUF=DATA_BUF<<1;
0044 ; SCK=1;
0044 ; //OED&=0XFD; // DATA=1; //设置为输入状态
0044 ; if (MISO) //读取最高位,保存至最末尾,通过左移位完成整个字节
0044 ; {
0044 ; DATA_BUF|=BYTE_BIT0;
0044 ; }
0044 ; else
0044 ; {
0044 ; DATA_BUF&=~BYTE_BIT0;
0044 ; }
0044 ; //OED|=0X02;
0044 ; SCK=0;
0044 ; }
0044 ; return DATA_BUF;
0044 ; }
0044 ;
0044 ; void SpiWrite(unsigned char send)
0044 ; {
0044 ; unsigned char i;
0044 ; DATA_BUF=send;
0044 ; for (i=0;i<8;i++)
0044 ; {
0044 ; if (DATA7) //总是发送最高位
0044 ; {
0044 ; MOSI=1;
0044 ; }
0044 ; else
0044 ; {
0044 ; MOSI=0;
0044 ; }
0044 ; SCK=1;
0044 ; DATA_BUF=DATA_BUF<<1;
0044 ; SCK=0;
0044 ; }
0044 ; }
0044 ; */
0044 ;
0044 ; void main()
0044 ; {
0044 .dbline 115
0044 ; uint num;
0044 ; SpiInit();
0044 F1DF xcall _SpiInit
0046 .dbline 116
0046 ; PORTA=0X55;
0046 85E5 ldi R24,85
0048 8BBB out 0x1b,R24
004A 0CC0 xjmp L13
004C L12:
004C .dbline 118
004C ; while(1)
004C ; {
004C .dbline 119
004C ; if(MISO==0)
004C 86B3 in R24,0x16
004E 8695 lsr R24
0050 8695 lsr R24
0052 8695 lsr R24
0054 8170 andi R24,1
0056 11F4 brne L15
0058 .dbline 120
0058 ; {
0058 .dbline 121
0058 ; num++;
0058 4F5F subi R20,255 ; offset = 1
005A 5F4F sbci R21,255
005C .dbline 122
005C ; }
005C L15:
005C .dbline 123
005C 4BBB out 0x1b,R20
005E .dbline 124
005E 08EE ldi R16,1000
0060 13E0 ldi R17,3
0062 CEDF xcall _delayms
0064 .dbline 125
0064 L13:
0064 .dbline 117
0064 F3CF xjmp L12
0066 X2:
0066 .dbline -2
0066 .dbline 126
0066 ; PORTA=num;
0066 ; delayms(1000);
0066 ; }
0066 ; }
0066 L11:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbsym r num 20 i
0068 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -