课设
毕设
论文
工具
软件
开发学习套件
礼品中心
助学活动
校园大使
讲师招募
黑板报
联系我们
畅学电子
首页
学习
单片机
硬件设计
软件开发
技术应用
基础课
课设毕设
电子竞赛
职场创业
课程
计划
项目
小组
登录
注册
小组
»
单片机
»
PIC
»
讨论区
小组首页
讨论区
附件区
成员
PIC24F16KL402开发板使用笔记三: 串口1控制继电器
本程序使用了UART1的发送和接收中断,分享给大家参考希望对大家有一点帮助。下载后,在上位机使用SecureCRT or 串口调试助手调试效果很好,很稳定。
#include "xc.h"
//#include <string.h>
#include <stdlib.h>
_FBS
(
BWRP_OFF & // Boot Segment Write Protect (Disabled)
BSS_OFF // Boot segment Protect (No boot flash segment)
)
//_FGS
//(
// GWRP_OFF & // General Segment Flash Write Protect (General segment may be written)
// GSS0_OFF // General Segment Code Protect (No Protec
ti
on)
//)
_FOSCSEL
(
FNOSC_FRC & // Oscillator Select (8MHz FRC with Postscaler (FRCDIV))
// SOSCSRC_ANA & // SOSC Source Type (Analog Mode for use with crystal)
// LPRCSEL_HP & // LPRC Power and Accuracy (High Power/High Accuracy)
IESO_ON // Internal External Switch Over bit (Internal External Switchover mode enabled (Two-speed Start-up enabled))
)
_FOSC
(
// POSCMD_HS & // Primary Oscillator Mode (Primary oscillator disabled)
OSCIOFNC_ON & // CLKO Enable Configuration bit (CLKO output signal enabled)
POSCFREQ_MS & // Primary Oscillator Frequency Range Configuration bits (Primary oscillator/external clock frequency between 100kHz to 8MHz)
SOSCSEL_SOSCHP &// SOSC Power Selection Configuration bits (Secondary Oscillator configured for high-power operation)
FCKSM_CSECME // Clock Switching and Monitor Selection (Clock Switching and Fail-safe Clock Monitor Enabled)
)
_FWDT
(
WDTPS_PS32768 & // Watchdog Timer Postscale Select bits (1:32768)
FWPSA_PR128 & // WDT Prescaler bit (WDT prescaler ratio of 1:128)
FWDTEN_OFF & // Watchdog Timer Enable bits (WDT disabled in hardware; SWDTEN bit disabled)
WINDIS_OFF // Windowed Watchdog Timer Disable bit (Standard WDT selected (windowed WDT disabled))
)
// Warning:
// Always enable MCLRE_ON config bit setting so that the MCLR pin function will
// work for low-voltage In-Circuit Serial Programming (ICSP). The Microstick
// programming circuitry only supports low-voltage ICSP. If you disable MCLR pin
// functionality, a high-voltage ICSP tool will be required to re-program the
// part in the future.
_FPOR
(
BOREN_BOR3 & // Brown-out Reset Enable bits (Enabled in hardware; SBOREN bit disabled)
PWRTEN_ON & // Power-up Timer Enable (PWRT enabled)
I2C1SEL_PRI & // Alternate I2C1 Pin Mapping bit (Default SCL1/SDA1 Pins for I2C1)
BORV_V18 & // Brown-out Reset Voltage bits (Brown-out Reset at 1.8V)
MCLRE_ON // MCLR Pin Enable bit (RA5 input disabled; MCLR enabled)
)
_FICD
(
ICS_PGx3 // ICD Pin Placement Select (EMUC/EMUD share PGC3/PGD3)
)
#define FP 4000000
#define BAUDRATE 9600
#define BRGVAL ((FP/BAUDRATE)/16) - 1
char ReceivedChar;
void delay(unsigned int uiCnt)
{
int i,j;
for(i=0;i<uiCnt;i++)
for(j=0;j<110;j++);
}
int main(void)
{
TRISAbits.TRISA0 = 0;
TRISAbits.TRISA1 = 0;
TRISAbits.TRISA2 = 0;
TRISAbits.TRISA3 = 0;
TRISBbits.TRISB3 = 0;
ANSBbits.ANSB2 = 0;
TRISBbits.TRISB2 = 1;
U1MODEbits.UARTEN = 0;
U1MODEbits.UEN0 = 0;
U1MODEbits.UEN1 = 0;
U1MODEbits.STSEL = 0; // 1-stop bit
U1MODEbits.PDSEL = 0; // No Parity, 8-data bits
U1MODEbits.ABAUD = 0; // Auto-Baud disabled
U1MODEbits.BRGH = 0; // Standard-Speed mode
U1BRG = BRGVAL;
//U1BRG = 103;
U1STAbits.URXISEL = 0; // Interrupt after one RX character is received;
U1STAbits.UTXISEL0 = 0;
U1STAbits.UTXISEL1 = 0;
U1STAbits.URXISEL0 = 1;
U1STAbits.URXISEL1 = 1;
IEC0bits.U1TXIE = 1;
IFS0bits.U1TXIF = 1;
IEC0bits.U1RXIE = 1;
IFS0bits.U1RXIF = 1;
U1MODEbits.UARTEN = 1; // Enable UART
U1STAbits.UTXEN = 1;
U1TXREG = 'H';
while(1)
{
delay(100);
LATAbits.LATA0 ^= 1;
//PORTB3接一个继电器
switch(ReceivedChar)
{
case 'o':
LATBbits.LATB3 = 1;
break;
case 'p':
LATBbits.LATB3 = 0;
break;
}
}
}
void __attribute__((interrupt, shadow, no_auto_psv)) _U1TXInterrupt(void)
{
IFS0bits.U1TXIF = 0; // Clear TX Interrupt flag
//U1TXREG = 'a'; // Transmit one character
}
void __attribute__((interrupt, shadow, no_auto_psv)) _U1RXInterrupt(void)
{
IFS0bits.U1RXIF = 0; // Clear TX Interrupt flag
//U1TXREG = 'a'; // Transmit one character
LATBbits.LATB3 ^= 1;
/* Get the data */
if(U1STAbits.URXDA == 1)
{
ReceivedChar = U1RXREG;
U1TXREG = ReceivedChar;
}
}
粽子糖果
发表于
10-26 10:41
浏览65535次
分享到:
已有0条评论
暂时还没有回复哟,快来抢沙发吧
添加一条新评论
只有登录用户才能评论,请先
登录
或
注册
哦!
话题作者
粽子糖果
(总统)
金币:
41631个
|
学分:
51991个
同小组最新话题
C语言编程
PIC单片机型号中后缀A/B/C分别代表什么
PIC单片机的各种中断有没有优先级之分
PIC单片机型号的温度级如何识别
PIC单片机应用中晶体选择的注意事项
PIC单片机应用时出现上电工作正常而睡眠后唤醒不了
用PICSTAR-PLUS烧写16CE625-04/P保密位无法烧成"保密"
PIC16C7XX的A/D片内RC振荡器能否用于计数器?
使用带A/D的PIC芯片时怎样才能提高A/D转换的精度?
为何系统在外界磁场和电场的干扰时不能正常工作
课程推荐
» 更多
超声波测距模块实战教程
畅学三合一STM32单片机实战教程
畅学三合一AVR单片机实战教程
畅学MSP430F5438A单片机精讲课程
ARM单片机开发环境-KEIL MDK的实战操作
ARM7单片机轻松入门与实践 — 畅学单片机
温湿度传感器模块实战教程
MSP430单片机轻松入门与实践 — 畅学单片机
STM32单片机轻松入门与实践 — 畅学单片机
无线模块实战教程
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!
已有畅学电子网帐号?
登录
可从合作网站帐号登录:
QQ
新浪微博
x