摘要:c8051f021是美国cygnal公司生产的单片机。具有双串口、低功耗、高速度等优点。本文以gsm的数据业务,设计一种具有报警和定位的移动终端,并介绍该终端的结构框图、工作原理以及i/o配置和初始化程序。
gps模块 移动终端 定位报警
引言
gsm网是目前移动通信体制中最成熟、最完善、应用最广的一种系统。数据业务作为gsm网络的一种基本业务,已得到越来越多的系统运营商和开发商的重视,基于这种业务的各种应用也蓬勃发展起来。以gsm网络作为无线数据传输网络,可开发出多种前景极其乐观的应用,如无线远程检测和控制、无线自动警报等。本文基于gsm的数据业务设计一种实时性比较强、数据率为9.6kbps的具有报警和定位的终端。
1 c8051f021简述
c8051f021是集成在一块芯片上的混合信号系统级单片机,芯片上有32位数字i/o端口(引脚),与标准8051的端口(p0~3)相同。c8051f021在功能上有所增强,每个i/o端口都可独立地设置为推挽或开漏输出和弱上拉,这为一些低功耗系统设计提供了节省电源的手段,而其最突出优点就是改进了可以控制片内数字资源与外部i/o引脚相连的交叉开头网络。通过设置交叉开关控制寄存器,将人的数字资源输入输出配置为端口i/o引脚,这就允许用户根据自己的特定应用将通用i/o端口与所需数字资源相结合。c7051f021具有双串口、多中断源、低功耗、高速度、低电压工作(3.3v)、高容量存储器等特性,这些特性满足本终端核心处理器的要求:低功耗、集成度高、可扩展性好等。
2 终端结构框图
终端系统是由c8051f021单片机、gsm模块、gpsoem接收模块、键盘和液晶显示器组成,如图1所示。c8051f021单片机是用来实时采集终端外围设备数据并进行相应的处理;gsm模块即gsm无线调制解调器,完成和gsm网的接续,负责通过串口接收来自单片机所采集到的数据,并以无线电磁波的形式发送,或接收来自远程计算机发来的信息并传递给单片机处理;gpsoem的主要功能是接收卫星发射导航电文的信号,并进行码测量或相位测量,然后根据导航电文提供的卫星位置和时钟差校正信息,计算gps接收机的当前位置,在单片机的控制下传输定位数据;键盘包括数字键和功能键,数字键用来设置呼叫远程主机的号码,功能键具有相应的报警功能如火警、匪警等和辅助功能;液晶显示器用来显示操作信息和提示信息。由于移动终端不需采集和存储大量的数据,仅采集gps-oem模块的导航数据、报警类型数据和存储呼叫远程主机的号码数据和系统程序,所以c8051f021自带的存储器容量即64kb+128 flash和4kb+256b ram已满足本终端的需要,故不需扩展外部存储器。
3 工作原理
在终端中,由gps-oem模块完成位置定位。gsm模块完成与gsm网通信接续,用户按键盘上的报警按钮后,单片机通过串口实时读取来自gps-oem发出的导航电文,从中提取经度、纬度、速度、时间、航向定位数据,并和相应的报警类型数据重新组合形成新的数据格式。同时,以atd指令进行拨号在接,连接成功后通过所建立的数据链路实时传输数据,监控中心计算机接收数据并进行经纬度数据坐标变换、误差校正等处理,在电子在图上实时显示出当前监控的终端地理位置,并实时地跟踪移动终端,并以声光的形式提示工作人员,以便及时处理警情。移动终端也可随时接来自监控中心的控制命令,并依命令执行相应的动作。
4 终端i/o配置和初始化程序
由于本系统需要配置uart0、smbus、uart1、int0和int1(8位),存储器的工作模式为片内方式。p1端口作为4×4键盘的接口,p2、p3口作为通用的i/o端口,其中int0用作远程主机呼叫终端时的中断处理,int1用作键盘中断处理。故c8051f021单片机的emif和i/o端口配置如下。
①设emi的配置寄存器emi0cf=0x00,因为本应用无扩展存储器和存储器映像的i/o设备,即存储器工作模式为片内方式;同时将emifle(xbr2.5)设置为0,这样p037、p0.6、p0.5的引脚将由交叉开关或端口锁存器来决定,不被交叉开关忽略。
②按uart0en=1、uart1en=1、smb0en=1、int0e=1、int1e和emifle=0设置xbr0、xbr1和xbr2为xbr0=0x05、xbr1=0x14、xbr2=0x04。
③配置p1端口为数字输入模式,即p1mdin=0xff。p1端口低4位为键盘输出,高4位为输入,p1mdout=0x0fh(p1.0~p1.3为推挽方式,p1.4~p1.7为漏极开路方式),p1=0xf0。
④使能交叉开关,即xbare=1,xbr2=0x44。因为emifle=0,交叉开关译码器将不跳过p0.7、p0.6、p0.5引脚,所以按优先权交叉开关译码表进行分配。uart0具有最高优先权,故p0.0分配给tx0、p0.1分配给rx0;smbus的sda、scl分别分配在p0.2、p0.3引脚;uart1的tx1、rx1分别分配在p0.4、p0.5引脚;int0分配在p0.6引脚;int1分配在p0.7引脚。
⑤设置uart0的tx0引脚(tx0,p0.0)、uart1的tx1引脚(tx1、p0.4)为推换输出方式,即p0mdout=0x11。rx0、sda、scl、rx1、int0和int1是由交叉开关分配输入的,因此与其端口配置寄存器的值无关。
⑥p2、p3作为一般i/o端口初始化输入状态,即p2mdout=0x00、p2=0xff和p3mdout=0x00、p3=0xff。
引脚分配如表1所列。表1 单片机引脚分配
引脚 | p0.0 | p0.1 | p0.2 | p0.3 | p0.4 | p0.5 | p0.6 | p0.7 | p1 | p2 | p3 |
功能 | tx0 | rx0 | sdk | scl | tx1 | rx1 | int0 | int1 | 键盘 | 通用 | 通用 |
初始化程序如下:
void system_init(){
wdtcn=0xdeh; //禁止看门狗
wdtcn=0xadh;
emi0cf=0x00;
xbr0=0x05; //使能uart0、smbus
xbr1=0x14; //使能uart1,使能交叉开关和弱上拉,禁止外部寄存器低端口ale、wr、rd由交叉开关寄存器或地址锁存器决定i/o端口配置
p0mdout=0x11; //tx0、tx1为推挽输出,rx0、sda、scl、rx1、int0和int1是由交叉开关分配输入的,因此与其端口配置寄存器的值无关
p2mdout.0=0x0; //把p2.0位初始化为输入方式,用作lcd的命令/数据的辨别
p2.0=1;
//初始化为4×4键盘接口
p1mdin=0xffh; //配置p1端口为数字输入模式
p1mdout=0x0fh; //配置p1.0~p1.3为推挽方式,p1.4~p1.7为漏极开路方式
p1=0xf0; //p1端口低4位为输出,高4位为输入
p3mdout=0x00; //将p3口设置为输入方式
p3=0xff;
ie=0x85; //使能int0、int1并按默认的优先权进行切换
}
;uart0初始化函数;定时器1为uart0波特率源
void uart0_init(){
scon0=0x50; //uart工作模式为1,8位数据位,使能rx
tmod=0x20; //定时器1工作模式2,8位自动重载
th1=-(sysclk/9600/16);//按波特率设置定时器1的重载值
tl1=th1; //设置定时器1的初始值
ckcon=0x10; //使用系统时钟sysclk作为时基
pcon=0x80; //scod0=1
tr1=1; //启动定时器1
}
;uart1初始化函数;配置定时器4为串口波特率源
void uart1_init(void){
scon1=0x50; //scon1:模式1,8位uart,使能rx
t4con=0x30; //停止定时器;清除中断标示;使能uart波特率模式
rcap4=-(sysclk/9600/32);//按波特率设置定时器t4重载值
t4=rcap4; //给定时器4赋初值
t4con=0x04; //(tr4=1)启动定时器4
ti1=1; //清除hw_uart接收和发送中断
}
;smbus初始化函数
void smbus_init(){
smb0cn=0x04h; //配置smbus在应答周期发送确认ack
smbocr=0x60; //时钟速率大约10μs,根据smbocr公式计算
smb0cn=0x40h; //使能smbus
}
6 总结
该该端具有功耗低、集成度高、数据处理速度快以及数据通信实时性强等特点,可广泛应用于个人、出租车和长途车辆的定位和报警。由于其利用gsm网的电路型数据业务进行无线数据通信,其通信费用相对比较高。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』