mege16 usart 的测试代码
来源:互联网 发布:淘宝客服月薪大概多少 编辑:程序博客网 时间:2024/05/17 20:43
最近要做一个基于GSM的报警器,初步选型是选择现在手上有的mege16,显示运用无字库的lcd12864 KS0108B GSM 是MC35
现在第一步是先弄好mege16的串口,下面是最简单的串口代码。
#define USART_C
#include "includes.h"
void UsartInit(void)
{
// 晶振频率 : 8.0MHz
// 通信参数: 8 Data, 1 Stop, No Parity
// 波特率:
// UBRRL= 0x33 9600;
UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //允许发送和接收,接收中断使能
UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据位+1位停止位
UBRRH = 0x00;
UBRRL = 0x33;
//sei();
}
int PutChar(char c)
{
if(c == '\n')
{
PutChar('\r');
}
UDR = c;
while(!(UCSRA &(1<<UDRE)));
UCSRA |= (1<<UDRE);
return 0;
}
void SendNbyte(unsigned char *p,unsigned char L)
{
unsigned char w;
for(w=0;w<L;w++)
{
// UDR = *(p+w);
// while(!(UCSRA &(1<<UDRE)));
//UCSRA |= (1<<UDRE);
PutChar(*(p+w));
}
}
void PutStr(unsigned char *Str)
{
while(*Str != '\0')
{
PutChar(*Str);
Str++;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#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>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- mege16 usart 的测试代码
- USART测试
- Stm32使用Usart代码例子
- STM32 USART的使用
- STM32的USART
- STM32的USART注意
- STM32的USART
- STM32的USART
- STM32的USART
- USART串口的使用
- STM32的USART讲解
- USART
- USART
- USART
- USART
- STM32F10X USART发送详解,测试无误
- STM32F10X USART 中断接受+发送,测试无误
- PIC16F877A的USART的使用 第一讲USART发送器
- Collections 操作
- 村干部群体套领惠农补助续:村支书被停职
- 设置UltraeEdit使之能编译运行Java程序
- C++ 什么是智能指针?
- 3G业务的市场与代表性业务剖析 项破刚
- mege16 usart 的测试代码
- 部署vc2008sp1编译的程序--续
- Java JDK Basic Tool介绍
- 出租车几何学:一个全新的几何世界
- 类名后加&符号是什么意思?
- TeX系列: Sketch--三维图形翻译器
- J2SE+TOMCAT的配置(2006.9.21)
- 手诊学习 很准的手诊
- 科幻电影