📄 mypic16f73.c
字号:
#include <pic.h>
#include "MyPIC16F73.h"
#define fosc 4000000 //晶振频率,4M
#define BaudRate 9600 //波特率
//*************************************
//函数预定义
//*************************************
void Delay(uchar t) //t=0时,空跳,19
{
uchar i; //t=1时,30 t=2时,41 增加1延时增加11us
for(i=0;i<t;i++) //t=ff时,2824
CLRWDT(); //t=5a时,1000
}
/*void Delay1(uchar t) //延时头需要10
{
uchar i;
for(i=0;i<t;i++)
CLRWDT();
}*/
/*void Send232(uchar data)
{
TXREG=data;
do
{;}while(TRMT==0); //等待发送完成
}*/
void Send232(uchar data)
{
while(!TRMT);//等待上次发送完成
TXREG=data;
}
//*************************************/
//
// 初始化
//
//*************************************/
void Initial() //系统初始化程序
{
//AD初始化
ADCON1=0b00000111; //A口用作数字口
//IO初始化
TRISA=0b00000000; //A均为输出,液晶数据0~5
TRISB=0xe0; //B口5、6、7为输入,其它为输出
TRISC=0b11000000; //C口6、7为232信号
PORTA=0b00111111; //初始化各个IO口电平
PORTB=0b11111111; //
PORTC=0b11100000; //控制485总线
//计数器初始化===============================================================================================================
//OPTION状态寄存器,中断使能
// /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
// RB弱上拉 中断边沿选择 TMR0时钟源选择 TMR0时钟沿选择 预分频选择位 预分频比率
// 低电平有效 1:上升沿 1:外部 RA4/T0CKI 1:高到低 1:给WDT
// 0:内部时钟 0:低到高 0:给TMR0
OPTION=0x0f; //TMR1预分频用做WDT,128分频
//T1CON状态寄存器
// — — T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
// TMR1预分频 TRM1振荡器使能位 使用内部时钟时不用理 TMR1时钟源选择 TMR1开关
// 1:外部时钟
// 0:内部时钟(fosc/4)
T1CON=0B00010000; //TMR1工作在定时模式,预分频为1:8
//T2CON状态寄存器
// — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
// TMR2后分频 TMR2开关 TMR2预分频
//
T2CON=0x00;
//PR2=104; //9600的波特率
//R232初始化===============================================================================================
//TXSTA状态寄存器
// CSRC TX9 TXEN SYNC - BRGH TRMT TX9D
// 时钟源选择 发送位数 发送使能 串口模式 高波特率选择 TRM状态 发送的第9位
// 异步不用理 1:9位 1:同步 1:高 b=fosc/(64(X+1)) 1:空
// 0:8位 0:异步 0:低 b=fosc/(16(X+1)) 0:满
TXSTA=0b00100110; //异步方式、使能发送、八位字长、高波特率。
// 波特率设定
SPBRG=fosc/BaudRate/16-1; //Baud Rate = Fosc/(16(SPBRG+1)) = 9600
//RCSTA状态寄存器
// SPEN RX9 SREN CREN - FERR OERR RX9D
// 串口使能位 接收位数 异步未用 异步接收使能 帧出错 溢出 接收的第9位
// 1:9位
// 0:8位
RCSTA=0b10000000; //使能串口、关闭接收。
//发送:数据装入TXREG后开始发送
//接收:接收到后从RCREG中读数据
//中断初始化=========================================================================================================
//PIE1状态寄存器,中断使能
// PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
// 并口中断 AD中断 接收中断 发送中断 同步串口中断 CCP1模块中断 定时器2中断 定时器1中断
// 73无此位
//
PIE1=0b00000001; //TMR1中断
//INTCON状态寄存器,中断使能
// GIE PEIE TMR0IE INTIE RBIE TMR0IF INTF RBIF
// 全局中断 外围设备中断 RB7~RB4电平变化中断
//
//
RBIE=1; //使能端口B中断
PEIE=1; //使能中断
GIE=1;//GIE=1;
PIR1=0; //清除断标志
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -