PIC单片机及FPGA实验系统设计 第21页
PORTD=dispcode[duan[4]];
delay(8);
PORTC=PORTC|0xff;
}
//中断服务程序,优先级人为设定
void interrupt AD_T0(void){
if(T0IF==1){
T0IE=0;
diplay();
T0IF=0;
T0IE=1;
}
if(ADIF==1){
ADIF=0;
AD_convert();
ADGO=1;
}
}
void delay(unsigned char z){
unsigned char i,j;
for(i=0;i<20;i++){
for(j=0;j<50;j++){
}
}
}
void AD_convert(void){
Ad_Sample_Result=(ADRESL+(ADRESH<<8))<<3; //读取并存储A/D转换结果
Ad_shezhi=Ad_Sample_Result;
duan[4]=Ad_Sample_Result%10;
duan[3]=Ad_Sample_Result/10%10;
duan[2]=Ad_Sample_Result/100%10;
duan[1]=Ad_Sample_Result/1000%10;
duan[0]=Ad_Sample_Result/10000;
}
附录(十二):通信:MUC-MUC.asm
;----主机--
;-----主模式通信-----
;-------控制位和标志位设定---
cs_mcu equ PORTC,2 ;定义片选控制引脚
data_ok equ PORTB,1 ;接收数据正确指示引脚
data_err equ PORTB,2 ;接受数据错误指示引脚
;------入口--------
org 00H
nop ;用于ICD2调试
goto main
;-----主程序--------
main
banksel SSPSTAT ;选择体1(方式同bsf...bcf...)
clrf SSPSTAT ;清--同步接口状态和控制寄存器
clrf TRISB ;定义PORTB输出(同MOVLW 00H,MOVWF TRISB)
movlw 0d7H ;设定SD0输出,SDI输入,SCK输出
movwf TRISC ;设置PORTC输入输出
clrf STATUS ;选择体0
clrf INTCON ;禁止所有中断
clrf PIR1 ;SSPIF=0
clrf PORTB ;PORTB输出复位
bsf cs_mcu ;从机SS禁止
movlw 41H ;CKP=0,SSPEN=1,SPI主模式Fosc/16
movwf SSPCON ;设置SSP
LOOP bcf cs_mcu ;从机SS使能
movlw 0x55 ;向从机发送数据0x55
movwf SSPBUF ;写入SSPBUF后开始发送和接收过程
btfss PIR1,SSPIF ;接收完毕否?
goto $-1 ;否,继续等待
bsf cs_mcu ;否,从机SS禁止
bcf PIR1,SSPIF ;清SSPIF标志
movf SSPBUF,w ;读取接收到的内容
xorlw 0AAH ;是AAH? 判断方式
skpz ;是,正确
goto RecDataErr ;否,错误
RecDataOk
bsf data_ok ;置位正确标志位data_OK
bcf data_err ;清除错误标志
goto loop
RecDataErr
bcf data_ok ;清除正确标志
bsf data_err ;置位错误标志位
goto loop
;--------------程序结束------------------
end
mcu-mcu-cong.asm
;----SPI从模式通信,SS选择控制
;------定义接收成功和失败标志----
data_ok equ PORTB,1 ;接收数据正确指示引脚
data_err equ PORTB,2 ;接收数据错误指示引脚
w_temp equ 20H ;现场保护暂存变量
status_temp equ 21H
;-------入口---------------------
org 00H ;复位入口
nop ;用于ICD2调试
goto mian
;---------中断服务程序-------------
org 04H ;中断程序入口地址(PIC的中断比较特殊,中断保护也很特殊)
;----------现场保护程序-------------
movwf w_temp ;把W中的内容送到w_temp中暂存
movlw STATUS ;保护状态寄存器status
movwf status_temp
;----------现场保护结束-------------
clrf STATUS ;选择体0
btfss PIR1,SSPIF ;是SSP中断吗?
goto EndOfInt ;否,结束
SSP_INT ;是,进入中断程序
bcf PIR1,SSPIF ;清除中断标志(基本做法,进入中断要软件清除标志)
movf SSPBUF,w ;读取接收到的数据
movwf tmpBuff ;暂存到tmpBuff
movlw AAH ;准备下次要发送的数据
movwf SSPBUF ;放入SSPBUF待发
movlw 55H ;检查接收到的数据
xorwf tmpBuff
skpz ;是,接收正确
goto RecDataErr ;否,接收错误
RecDataOk
bsf data_ok
bcf data_err
goto EndOfInt
RecDataErr
bcf Data_ok
bsf data_err
goto EndOfInt
<< 上一页 [21] [22] [23] [24] [25] [26] [27] [28] 下一页
PIC单片机及FPGA实验系统设计 第21页下载如图片无法显示或论文不完整,请联系qq752018766