📄 spi_test_save.#2
字号:
// 3线主方式或3线从方式
$include (C8051F310.inc)
ORG 00H
LJMP Main
ORG 0100H
Main:
ANL PCA0MD,#0BFH ; 关闭看门狗
LCALL SYSCLK_Init
LCALL Port_IO_Init
LCALL SPI_Init
LCALL UART0_Init
LOOP:
JNB SPIF, $ ; 等待数据
CLR SPIF ; 清接收中断标志
MOV A, SPI0DAT ; 接收数据
MOV R0,A ; 将接收到的数据保存在R0中
CPL P0.7
MOV SBUF0,A
JNB TI0,$
CLR TI0
CLR A
AJMP LOOP
SYSCLK_Init:
MOV OSCICN,#083H ; 允许内部振荡器,不分频,最高频率
MOV CLKSEL,#000H ; 使用内部振荡器
mov OSCXCN,#00H
RET
Port_IO_Init:
mov XBR0, #003h ; SPI,UART 连到端口引脚
mov XBR1, #040h ; 弱上拉允许,交叉开关允许
MOV P0MDOUT,#10010011B ; P2 推挽输出
SETB P0.7
ret
SPI_Init:
mov SPI0CFG, #000h ; 允许从方式,在SCK的第一个边沿采样数据,SCK在空闲时处于低电平
mov SPI0CN, #001h
mov SPI0CKR, #04H ;
ret
UART0_Init:
MOV PCON,#000H
MOV TMOD,#021H ; 定时器1工作在方式2(8位自动重装)
MOV CKCON,#004H //*********************
MOV TH1,#096H ; 计数重装值
MOV TL1,#096H ; 定时器1计数初值(96=256-(24.5M/2/12/9600)),波特率9600bps(bit cond)
MOV SCON0,#010H ; SCON0:模式1,8位UART,启用RX
SETB TR1 ; 启动定时器1
CLR EA ; 禁止所有中断
CLR ES0 ; 禁止串行中断
RET ; UART0的初始化子程序结束
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -