综合资讯 技术文章 原文阅读 在线商城 下载专区 DATASHEET 技术论坛 商务频道

电子技术 | 技术资料 | 嵌入式系统 | 单片机专题 | DSP专题
EDA/PLD专题 | 电源技术专题 | 电子制作专题 | 其他综合 | 芯片选型

所在的位置:首页在线阅读单片机专题PIC16F87X单片机实用软件与接口技术--C语言及其应用正文
 
第5章 PIC16F877的外围功能模块

 

5.1.2  简单应用实例
该例用于令与PORTD口相连的8个发光二极管前4个点亮,后4个熄灭。在调试程序前,应使与PORTD口相连的8位拔码开关拔向相应的位置。
5.1   PORTD输出
#include<pic.h>
main()
{
TRISD=0X00
/*TRISD寄存器被赋值,PORTD每一位都为输出*/
while(1)
/*循环执行点亮发光二极管的语句*/
{
PORTD=0XF0
/*PORTD送数据,点亮LED(由实验模板*/
/*
的设计决定相应位置低时LED点亮)。*/
}
}

5.2.1  MSSP
模块SPI方式功能简介
下面是一段简单的SPI初始化例程,用于利用SPI工作方式输出数据的场合。
5.2  SPI初始化程序
/*spi
初始化子程序*/
void SPIINIT()
{
PIR1=0
/*清除SPI中断标志*/
SSPCON=0x30
/* SSPEN=1CKP=0 FOSC/4 */
SSPSTAT=0xC0

TRISC=0x00
/*SDO引脚为输出,SCK引脚为输出*/
}
5.2.3  
程序清单
下面给出已经在实验板上调试通过的一个程序,可作为用户编制其它程序的参考。
#include<pic1687x.h>
/*
该程序用于在8LED上依次显示1~88个字符*/
static volatile int table[20]={0xc0
0xf90xa40xb00x990x920x820XD80x800x900x880x830xc60xa10x860x8e0x7f0xbf0x890xff}
volatile unsigned char data

#define PORTAIT(adr
bit)  ((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/
staticbit PORTA_5 @ PORTAIT(PORTA
5)
/*spi
初始化子程序*/
voidSPIINIT()
{
PIR1=0

SSPCON=0x30
/* SSPEN=1CKP=0 FOSC/4 */
SSPSTAT=0xC0

TRISC=0x00
/*SDO引脚为输出,SCK引脚为输出*/
}
/*
系统各输入输出口初始化子程序*/
voidinitial()
{
TRISA=0x00
/*A口设置为输出*/
INTCON=0x00
/*关闭所有中断*/
PORTA_5=0
/*LACK送低电平,为锁存做准备*/
}
/*SPI
发送子程序*/
void SPILED(int data)
{
SSPBUF=data
/*启动发送*/
do
{

}while(SSPIF==0)
/*等待发送完毕*/
SSPIF=0
/*清除SSPIF标志*/
}
/*
主程序*/
main()
{
unsignedI;
initial()
/*系统初始化*/
SPIINIT()
/*SPI初始化*/
for(i=8
i>0i--)/*连续发送8个数据*/
 {
data=table
/*通过数组的转换获得待显示的段码*/
SPILED(data)
/*发送显示段码显示*/
 }
PORTA_5=1
/*最后给锁存信号,代表显示任务完成*/
}
5.3.3  
程序清单
下面给出已经在实验板上调试通过的程序,可作为用户编制其它程序的参考。有关显示部分的SPI初始化,请读者参考5.2节。
#include<pic.h>
/*
该程序用于按下相应的键时,在第一个8LED上显示相应的14的字符*/
#define PORTAIT(adr
bit)  ((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/
static bit  PORTA_5  @  PORTAIT(PORTA
5)
#definePORTBIT(adr
bit)((unsigned)(&adr)*8+(bit)) /*绝对寻址位操作指令*/
static bit  PORTB_5  @  PORTBIT(PORTB
5)
static bit  PORTB_4  @  PORTBIT(PORTB
4)
static bit  PORTB_1  @  PORTBIT(PORTB
1)
static bit  PORTB_2  @  PORTBIT(PORTB
2)
unsigned intI

unsigned charj

int  data

/*spi
初始化子程序*/
void SPIINIT()
{
PIR1=0

SSPCON=0x30

SSPSTAT=0xC0

TRISC=0xD7
/*SDO引脚为输出,SCK引脚为输出*/
}
/*
系统各输入输出口初始化子程序*/
void initial()
{
TRISA=0xDF

TRISB=0XF0
/*设置与键盘有关的各口的数据方向*/
INTCON=0x00
/*关闭所有中断*/
data=0X00
/*待显示的寄存器赋初值*/
PORTB=0X00
/*RB1 RB2 先送低电平*/
j=0

}
/*
软件延时子程序*/
voidDELAY()
{
for(i = 6553
--i )
continue

}
/*
键扫描子程序*/
intKEYSCAN()
{
while(1)
{
if ((PORTB_5==0)||(PORTB_4==0))
break

}/*
等待有键按下*/
DELAY()
/*软件延时*/
if ((PORTB_5==0)||(PORTB_4==0))
KEYSERVE()
/*如果仍有键按下,则调用键服务子程序*/
elsej=0x00
/*如果为干扰,则令返回值为0*/
return(j)


返回 上一页 下一页   信息发布:工号01   转引自: 【 】 【打印】 【关闭

关于我们 ┋ 友情链接


深圳市南山科技园深南花园A座14D
电话:0755-88305872 传真:0755-88305880
Copyright©2005-2009 无忧电子开发网版权所有

粤ICP备05064233号