ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:18.29KB ,
资源ID:15339839      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-15339839.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机MSP430F149DS1302读写及串口收发程序.docx)为本站会员(b****6)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

单片机MSP430F149DS1302读写及串口收发程序.docx

1、单片机MSP430F149DS1302读写及串口收发程序/* 文件名称:* IIC.c* 文件说明:* 使用口线模拟IIC* 程序使用波特率为2400,程序运行时需要在pc机上使用一个串口* 接收发送程序,任意发送字符,接收的字符为十六进制时间数据* MSP-FET430P149 Demo - Basic Clock, MCLK Sourced from HF XTAL XT2* L.TCH* Feb 2007* Built with IAR Embedded Workbench Version: 3.10A*/*/#include /* 定义*/#define RST BIT7#define

2、 SDA BIT6#define SCLK BIT5 char pbuf7; char clok7=0x16,0x15,0x14,0x13,0x12,0x04,0x07; char cbuf; char bbuf; char *pda; char *pck; char *prg;/* 说明*/void Port_Init(void);void Init_CLK(void);void Init_UART0(void);void RST_Enable(void);void RST_Disable(void);void SCLK_HI(void);void SCLK_LO(void);void Wr

3、iteByte(char nVal); char ReadByte(void); void WriteTo1302(char nAddr, char nVal);char ReadFrom1302(char nAddr);void BurstWriteTime(char *pWClock);void BurstReadTime(char *pRClock);void BurstWriteRam(char *pWReg);void BurstReadRam(char *pRReg);void SetTime(char *pClock); void GetTime(char pTime); /*/

4、void Port_Init(void) P1DIR |= RST; /设置CE为输出管脚 P1DIR |= RST; /设置SCLK为输出管脚 P1DIR |= SCLK; P2DIR |= 0x02; / Set P2.1 to output direction return;void Init_CLK(void) unsigned int i; BCSCTL1 = 0X00; /将寄存器的内容清零 /XT2震荡器开启 /LFTX1工作在低频模式 /ACLK的分频因子为1 do IFG1 &= OFIFG; / 清除OSCFault标志 for (i = 0xFF; i 0; i-); w

5、hile (IFG1 & OFIFG) = OFIFG); / 如果OSCFault =1 BCSCTL1 &= (XT2OFF + XTS); /open XT2, LFTX2 select low frequency /BCSCTL1 |= RSEL0 + RSEL1 + RSEL2; /DCO Rsel=7(Freq=3200k/25摄氏度) /BCSCTL1 |= 0x07; BCSCTL2 += SELM1; /MCLK的时钟源为TX2CLK,分频因子为1 BCSCTL2 += SELS; /SMCLK的时钟源为TX2CLK,分频因子为1 return;void Init_UART0

6、(void) U0CTL = 0X00; /将寄存器的内容清零 UCTL0|=SWRST; P3SEL |= 0x30; / P3.4,5 = USART0 TXD/RXD ME1 |= UTXE0 + URXE0; / Enable USART0 TXD/RXD UCTL0 |= CHAR; / 8-bit character UTCTL0 |= SSEL1; / UCLK = SMCLK UBR00 = 0xD3; / 3.58Mhz/2400 -1491 UBR10 = 0x05; / UMCTL0 = 0x00; / no modulation UCTL0 &= SWRST; / In

7、itialize USART state machine IE1 |= URXIE0; / Enable USART0 RX interrupt IE1 &= UTXIE0; / Disable USART TX interrupt return;void RST_Enable(void) P1OUT |= RST; return;void RST_Disable(void) P1OUT &= (RST); return;void SCLK_HI(void) P1OUT |= SCLK; return;void SCLK_LO(void) P1OUT &= (SCLK); return;/*-

8、* 功能: 写入1Byte数据* 调用:* 输入: nVal 写入的数据 * 返回值: 无*-*/void WriteByte(char nVal) char i,j; char nTemp = nVal; char nSend; P1DIR |= SDA; /设置DATA为输出管脚 _NOP(); _NOP(); _NOP(); _NOP(); for(i = 0; i 0;j-) ; SCLK_LO(); for(j = 10;j 0;j-) ; nTemp = 1; /从0位开始,发8位 return;/*-* 功能: 读取1Byte数据* 调用: * 输入: * 返回值: nTemp*

9、-*/char ReadByte(void) char nTemp = 0; int i; int j; P1DIR &=SDA; /设置DATA为输入管脚 _NOP(); _NOP(); _NOP(); _NOP(); for(i = 0; i 0;j-); SCLK_LO(); _NOP(); _NOP(); if(P1IN & SDA) /如果第i位是高电平置1 nTemp |= (0x01 0;j-); return nTemp; /*-* 功能: 往DS1302写入1Byte数据* 调用:* 输入: nVal 写入的数据 * 返回值: 无*-*/void WriteTo1302(ch

10、ar nAddr, char nVal) RST_Disable(); SCLK_LO(); RST_Enable(); _NOP(); _NOP(); _NOP(); _NOP(); WriteByte(nAddr); /地址,命令 WriteByte(nVal); /写1Byte数据 SCLK_HI(); RST_Disable(); return; /*-* 功能: 从DS1302读取1Byte数据* 调用: * 输入: * 返回值: nDta*-*/char ReadFrom1302(char nAddr) char nData; RST_Disable(); SCLK_LO(); R

11、ST_Enable(); _NOP(); _NOP(); _NOP(); _NOP(); WriteByte(nAddr); /地址,命令 nData = ReadByte(); /读1Byte数据 SCLK_HI(); RST_Disable(); cbuf = nData; / return(nData);/*-* 功能: 往DS1302写入时钟数据(多字节方式)* 调用: * 输入: pClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制* 8Byte (BCD码) * 返回值: 无*-*/void BurstWriteTime(char *pClock) char

12、i; WriteTo1302(0x8e,0x00); /控制命令,写操作.。WP=0开写保护 RST_Disable(); SCLK_LO(); RST_Enable(); WriteByte(0xbe); /0xbe:时钟多字节写命令 for (i = 8; i 0; i-) /8Byte = 7Byte 时钟数据 + 1Byte 控制(即写保护) WriteByte(*pClock); /写1Byte数据 pClock+; SCLK_HI(); RST_Disable(); return; /*-* 功能: 读取DS1302时钟数据(多字节方式)* 调用: * 输入: pClock: 时钟

13、数据地址 格式为: 秒 分 时 日 月 星期 年 控制* 8Byte (BCD码) * 返回值: ucDa :读取的数据*-*/void BurstReadTime(char *pClock) char i; RST_Disable(); SCLK_LO(); RST_Enable(); WriteByte(0xbf); /0xbf:时钟多字节读命令 for (i = 8; i 0; i-) *pClock = ReadByte(); /读1Byte数据 pClock+; SCLK_HI(); RST_Disable(); return ;/*-* 功能: 往DS1302寄存器数写入数据(多字

14、节方式)* 调用: * 输入: pReg: 寄存器数据地址* 返回值: 无*-*/void BurstWriteRam(char *pReg) char i; WriteTo1302(0x8e,0x00); /控制命令,WP=0,写操作 RST_Disable(); SCLK_LO(); RST_Enable(); WriteByte(0xfe); /0xfe:寄存器数据多字节写命令 for (i = 31; i 0; i-) /31Byte 寄存器数据 WriteByte(*pReg); /写1Byte数据 pReg+; SCLK_HI(); RST_Disable(); return; /

15、*-* 功能: 读取DS1302寄存器数据* 调用: * 输入: pReg: 寄存器数据地址* 返回值: 无*-*/void BurstReadRam(char *pReg) char i; RST_Disable(); SCLK_LO(); RST_Enable(); WriteByte(0xff); /0xff:寄存器数据多字节读命令 for (i = 31; i 0; i-) /31Byte 寄存器数据 *pReg = ReadByte(); /读1Byte数据 pReg+; SCLK_HI(); RST_Disable(); return;/*-* 功能: 设置初始时间(以单字节读写进

16、行)* 调用: * 输入: pClock: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) * 返回值: 无*-*/void SetTime(char *pClock) /写时间寄存器,顺序是:(1)使寄存器可写,(2)写时间 (3)写保护 /以单个字节的形式进行读写 char i; char nAddr = 0x80; WriteTo1302(0x8e,0x00); /控制命令,WP=0,写操作(使时间寄存器可写) for(i = 7; i 0; i-) WriteTo1302(nAddr,*pClock); /秒 分 时 日 月 星期 年(从80

17、开始共写7个,每次地址2) pClock+; nAddr += 2; WriteTo1302(0x8e,0x80); /控制命令,WP=1,写保护? return;/*-* 功能: 读取DS1302当前时间(以单字节读写进行)* 调用: * 输入: pTime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 * 7Byte (BCD码) * 返回值: 无*-*/void GetTime(char pTime) /只读时间寄存器以单字节读写进行,连续7个 char i; char nAddr = 0x81; for (i = 0; i 7; i+) pTimei = Read

18、From1302(nAddr); /格式为: 秒 分 时 日 月 星期 年 nAddr += 2; return;/*-*接收中断*-*/#pragma vector=UART0RX_VECTOR /接收中断_interrupt void usart0_rx_tx (void)/* char i,t; for(t=0;t1;t+ ) /IFG1&=0XBF; /实际上是清URXIFG0,防止接收中断进入死循环 P2OUT = 0x02; / Toggle P2.1 using exclusive-OR while (!UTXIFG0); / USART0 tX buffer ready?)/GetTime(pbuf); /读1302时间/IE1 |= UTXIE0 ; /开发中断 for(i=0;i ? ( * ?

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2