好好学习,天天向上,一流范文网欢迎您!
当前位置:首页 >> 最新范文 内容页

单片机之间SPI总线通信实验报告

单片机之间SPI总线通信实验报告 本文关键词:单片机,总线,实验,通信,报告

单片机之间SPI总线通信实验报告 本文简介:实验报告课程名称:PIC单片机实验任课教师:周燕实验名称:单片机之间SPI总线通信实验年级、专业:09电科学号:20091050146姓名:院睿智日期:2012年6月20日云南大学信息学院一、实验目的n掌握SPI转换模块的内部结构和工作过程,每一位相关设置项的功能含义。n看懂电路原理图,掌握控制线的

单片机之间SPI总线通信实验报告 本文内容:

课程名称:

PIC单片机实验

任课教师:

周燕

实验名称:

单片机之间SPI总线通信实验

年级、专业:

09电科

号:20091050146

名:院睿智

日期:2012年6月20日

云南大学

信息学院

一、实验目的

n

掌握SPI转换模块的内部结构和工作过程,每一位相关设置项的功能含义。

n

看懂电路原理图,掌握控制线的连接方法;

n

进一步操作按键和显示的功能;

n

练习先编写流程图,再编写程序代码的能力,练习程序代码片段的功能测试;

n

进一步熟练掌握集成开发环境的使用方法

二、实验内容

1.

在MPLAB软件上设置相应的参数项,主要是菜单configure的configuration

bits。

2.新建工程和文件,编写代码,然后分别选择设备在菜单programmer中选择ICD2,再使用快捷键将程序烧进去点击运行按钮。

3.运行程序,观察结果。

三、实验步骤和过程记录(实现某一步骤时,不论是否成功和出现什么问题,记录自己采用的具体方法和过程)

四、主要算法与程序

#include

“p16f877a.inc“#DEFINE

CS_MCUPORTC,6

KEY_VALUEEQU20H

KEY_VALUE_CEQU21H

COUNT1EQU22H

COUNT2EQU23H

COUNT3EQU24H

COUNT4EQU25H

ORG00H

NOP

GOTO

MAIN

MAIN

BANKSELSSPSTAT

BCFSSPSTAT,CKE

;初始化SSPSTAT,

CKE=0,SMP=O

BCFSSPSTAT,SMP

CLRFOPTION_REG

;开启B口内部弱上拉,控制按键

CLRFTRISD

;将PORTD设置为输出端口,控制LED显示

MOVLWB

00111111

;RB0-RB5设置为输入端口,控制按键

MOVWFTRISB

MOVLWB

10010111

;初始化SPI模块通信线方向TRISC

为B

10010111

MOVWFTRISC

;SCK输出,SDO输出,SDI输入,CS_MCU输出

BCFPIE1,SSPIE

;禁止SSP中断

BSFINTCON,GIE

;禁止所有中断

BANKSELPIR1

BCFPIR1,SSPIF

CLRFPORTD

BSFCS_MCU

;从机SS禁止;

BSF

CS_MCU

MOVLWB

00100001

;初始化SSPCON;CKP=0,SSPEN=1,SPI主模式Fosc/16

MOVWFSSPCON

LOOP

CALLCHECK

;调用获取按键值CHECK子程序

BCFCS_MCU

MOVFKEY_VALUE,W

;向从机发送数据:将KEY_VALUE

写入SSPBUF后,开

MOVWFSSPBU

F

;始启动发送和接收过程

BTFSSPIR1,SSPIF

GOTO$-1

BSFCS_MCU

BCFPIR1,SSPIF

CALLDELAY_1ms

BCFCS_MCU

MOVLW

0x17

;写一个无效数据入SSPBUF后,启动发送和接收过程

MOVWFSSPBUF

BTFSSPIR1,SSPIF

GOTO$-1

BSFCS_MCU

BCFPIR1,SSPIF

MOVFSSPBUF,W

MOVWFKEY_VALUE_C

MOVFKEY_VALUE_C,W

MOVWFPORTD

GOTOLOOP

;**

函数名称:CHECK

;**

函数功能:获取按键值************************************************

CHECK

BANKSEL

PORTB

;跳到体0

LOOP1

CLRF

KEY_VALUE

;KEY_VALUE清零

MOVLW

B

00111111

;检测是否有按键被按下

ANDWF

PORTB,1

;屏蔽高两位

MOVLW

B

00111111

XORWF

PORTB,0

;异或检测按键是否有变化

BTFSS

STATUS,Z

GOTO

LOOP1

;否,继续查询

MOVF

PORTB,0

;是,把PORTB存到MCU_DATA

MOVWF

KEY_VALUE

CALL

DELAY_20ms

;延时20ms,看按键是否有抖动

MOVF

KEY_VALUE,0

;

XORWF

PORTB,0

BTFSS

STATUS,Z

GOTO

LOOP1

;有抖动,返回重新检测

LOOP2

MOVLW

B

00111111

;没有,等待所有按键被释放

ANDWF

PORTB,1

;屏蔽高两位

MOVLW

B

00111111

;异或检测按键是否已回弹

XORWF

PORTB,0

BTFSS

STATUS,Z

GOTO

LOOP2

CALL

DELAY_20ms

;延时20ms,看按键是否有抖动

LOOP5MOVLW

B

00111111

;异或检测按键是否已回弹

XORWF

PORTB,0

BTFSS

STATUS,Z

GOTO

LOOP5

MOVLW

B

11000000

;高两位置1,为取反做准备

IORWF

KEY_VALUE,1

COMF

KEY_VALUE,1

;KEY_VALUE取反

RETURN

;****************************************************************************

;**

函数名称:DELAY_20ms

;**

函数功能:延时20ms

;**

使用说明:

;****************************************************************************

DELAY_20ms

MOVLW

D

28

;设置外部循环次数

MOVWF

COUNT1

;

LOOP3

MOVLW

D

237

;设置内部循环次数

MOVWF

COUNT2

;

DECFSZ

COUNT2,1

;内部循环变量自减1,为0则跳转

GOTO

$-1

;

DECFSZ

COUNT1,1

;外部循环变量自减1,为0则跳转

GOTO

LOOP3

;

RETURN

;返回主程序

;****************************************************************************;**

函数名称:DELAY_1ms

;**

函数功能:延时1ms

;**

使用说明:

;****************************************************************************

DELAY_1ms

MOVLW

D

2

;设置外部循环次数

MOVWF

COUNT3

;

LOOP4

MOVLW

D

165

;设置内部循环次数

MOVWF

COUNT4

;

DECFSZ

COUNT4,1

;内部循环变量自减1,为0则跳转

GOTO

$-1

;

DECFSZ

COUNT3,1

;外部循环变量自减1,为0则跳转

GOTO

LOOP4

;

RETURN

;*************************************************************

END

五、实验结果与分析

实验中完成了目标,当在电脑上运行程序后,在主机上按下按钮,从机上对应的LED灯亮。

六、实验小结

通过本次实验,掌握了SPI转换模块的内部结构和工作过程,每一位相关设置项的功能含义。

附流程图:

8

TAG标签: