最近要做一个基于GSM的报警器,初步选型是选择现在手上有的mege16,显示运用无字库的lcd12864 KS0108B GSM 是MC35
现在第一步是先弄好mege16的串口,下面是最简单的串口代码。
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define MAIN_C
#include "includes.h"
/***************************/
/*串口通信*/
/*晶振为8MHz*/
/*波特率为9600bps*/
/*发送采用查询方式,中断采用接收方式*/
/***************************/
#define BufSize 10
unsigned char RsBuf[BufSize]; //定义接收缓冲器
int RsBytes = 0;
unsigned char flag = 0;
void main(void)
{
unsigned char *msg = "Usart Test!\n";
SREG |= (1<<7); //使能全局中断
UsartInit();
SendNbyte(msg,12);
PutStr("Test Ok\n");
delay_nms(1000);
while(1)
{
PutStr("Test Ok\n");
delay_nms(2000);
if(flag)
{
PutStr(RsBuf);
PutChar('\n');
flag = 0;
}
}
}
//接收中断子程序
#pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
void uart0_rx_isr(void)
{
//uart has received a character in UDR
RsBuf[RsBytes] = UDR;
RsBytes ++;
if(RsBytes > BufSize)
{
flag = 1;
RsBytes = 0;
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define DELAY_C
#include "includes.h"
#define XTAL 8 //晶振频率,单位MHz
void delay_1us(void) //1us延时函数
{
asm("nop");
}
void delay_nus(unsigned int n) //N us延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
delay_1us();
}
void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<(unsigned int)(XTAL*143-2);i++);
}
void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i<n;i++)
{
delay_1ms();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef USART_H
#define USART_H
#ifdef USART_C
void UsartInit(void);
int PutChar(char c);
void SendNbyte(unsigned char *p,unsigned char L);
void PutStr(unsigned char *Str);
#else
extern void UsartInit(void);
extern int PutChar(char c);
extern void SendNbyte(unsigned char *p,unsigned char L);
extern void PutStr(unsigned char *Str);
#endif
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef MAIN_H
#define MAIN_H
#define ENABLE_BIT_DEFINITIONS
#define OutPort PORTA
#define ConPort PORTC
#ifdef MAIN_C
unsigned char data[4] = {0,0,0,0};
unsigned char CNT = 0; //记数初值
unsigned char KeyUp;
unsigned char KeyDown;
#else
//extern unsigned char table[10];
#endif
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
#ifndef DELAY_H
#define DELAY_H
#ifdef DELAY_C
void delay_1us(void); //1us延时函数
void delay_nus(unsigned int n); //N us延时函数
void delay_1ms(void) ; //1ms延时函数
void delay_nms(unsigned int n) ; //N ms延时函数
#else
extern void delay_1us(void); //1us延时函数
extern void delay_nus(unsigned int n); //N us延时函数
extern void delay_1ms(void) ; //1ms延时函数
extern void delay_nms(unsigned int n) ; //N ms延时函数
#endif
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "main.h"
#include "delay.h"
#include "usart.h"
#include <iom16v.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////