MSP430f249读取DS1302时钟显示在1602和串口

发布者:温馨幸福最新更新时间:2020-07-14 来源: 51hei关键字:MSP430f249  读取DS1302  时钟显示  串口 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

#include 

#include  "cry1602.h"

#include  "cry1602.c"

#include  "DS1302.c"



unsigned char counter=0;

unsigned char second=0;

unsigned char minute=0;

unsigned char hour=0;

//signed char miao=10;

struct sTime bufTime; //time buffer


/*write 1 bcd byte on screen,(x,y)-position on screen, bcd-BCD byte to display*/

void Show2DigitNumber(unsigned char x, unsigned char y,unsigned char number)

{

        Disp1Char(x,y,(number/10+0x30  ));

        Disp1Char(x+1,y,(number%10 +0x30 ));

        

}





int main( void )

{

  

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  

  if (CALBC1_1MHZ==0xFF)                                        // If calibration constant erased

  {                                                                                       

    while(1);                               // do not load, trap CPU!!       

  }

  DCOCTL = 0;                               // Select lowest DCOx and MODx settings

  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO

  DCOCTL = CALDCO_1MHZ;

  

  P1DIR |= 0x01;                            // P1.0 output

  CCTL0 = CCIE;                             // CCR0 interrupt enabled

  CCR0 = 50000;

  TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode

  

  //P6DIR &= ~BIT2;                           //P6.2 input

  

  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD

  UCA0CTL1 |= UCSSEL_2;                     // SMCLK

  UCA0BR0 = 104;                            // 1MHz 9600; (104)decimal = 0x068h

  UCA0BR1 = 0;                              // 1MHz 9600

  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1

  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt



  InitDS1302();

  /*  

  P1DIR |= BIT0;//p1.0输出模式

  P1DIR |= BIT1;//p1.1输出模式

  P1DIR |= BIT7;//p1.7输出模式

  

  P1IE |= BIT2;//使能p1.2中断

  P1IES |= BIT2;//下降沿触发

  P1IFG &= ~BIT2;//清除p1.2中断

  

  P1IE |= BIT3;//使能p1.3中断

  P1IES |= BIT3;//下降沿触发

  P1IFG &= ~BIT3;//清除p1.3中断

  

  //P2DIR = 0XFF;P2OUT = 0XFF;

  //P6DIR = 0XFF;P6OUT = 0XFF;

  */

  LcdReset();

  Delay5ms();

  DispStr(0,0,"Serial Output:");

  DispStr(0,1,"00:00:00");

  GetRealTime(&bufTime);  //get current time

     minute=bufTime.min;minute=(minute>>4)*10+(minute&0x0f);

     hour=bufTime.hour;hour=(hour>>4)*10+(hour&0x0f);


     Show2DigitNumber(3,1,minute);

     Show2DigitNumber( 0,1,hour);

     

     second=DS1302SingleRead(0); second=(second>>4)*10+(second&0x0f);

     Show2DigitNumber(6,1,second); //DispStr(8,1," ");

  // __enable_interrupt();

  

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled


}


/*

#pragma vector = PORT1_VECTOR

__interrupt void P1_Interrupt()//P1口中断函数

{

  if(P1IFG&BIT2)//如果P1.2有中断

  {

    P1IFG &= ~BIT2;//清除P1.2引脚中断标志位

    P1OUT ^= BIT0;//P1.0引脚取反

    P1OUT ^= BIT7;//P1.7

    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = 97;  

    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = 62;

    //Disp1Char(0,1,97);

    //Disp1Char(1,1,62);

  }

  

  if(P1IFG&BIT3)//如果P1.3有中断

  {

    P1IFG &= ~BIT3;//清除P1.3引脚中断标志位

    P1OUT ^= BIT1;//P1.1引脚取反

    P1OUT ^= BIT7;//P1.7

    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = 50;

    //Disp1Char(0,1,50);

    //Disp1Char(1,1,32);

  }

}

*/




void Read_RTC(void)                //读取 日历

{


second=DS1302SingleRead(0); second=(second>>4)*10+(second&0x0f);

minute=DS1302SingleRead(1); minute=(minute>>4)*10+(minute&0x0f);

hour=DS1302SingleRead(2); hour=(hour>>4)*10+(hour&0x0f);

}



// Timer A0 interrupt service routine

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

#elif defined(__GNUC__)

void __attribute__ ((interrupt(TIMERA0_VECTOR))) Timer_A (void)

#else

#error Compiler not supported!

#endif

{

  counter++;

  if (counter==20)

  {

  counter=0;

/*second++;     


  if (second==60)

    {

       second=0;

       minute++;

       if (minute==60)

        {

          minute=0;

          hour++;

          if (hour==24)

          { hour=0;}

          Show2DigitNumber(0,1,hour); //DispStr(2,1,":");

        }

        Show2DigitNumber(3,1,minute); //DispStr(5,1,":");

      

      }

  */

//Read_RTC();

  P1OUT ^= 0x01;                            // Toggle P1.0

  second=DS1302SingleRead(0); second=(second>>4)*10+(second&0x0f);

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = hour/10+0x30;

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = hour%10+0x30;

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = 58;

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = minute/10+0x30;

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = minute%10+0x30;

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = 58;

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = second/10+0x30;

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = second%10+0x30;

   while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

    UCA0TXBUF = 13;

   

   

// Show2DigitNumber(0,1,hour); //DispStr(2,1,":");  

// Show2DigitNumber(3,1,minute); //DispStr(5,1,":");

      

     Show2DigitNumber(6,1,second); //DispStr(8,1," ");

  //miao = DS1302SingleRead(0);

  //miao=(miao>>4)*10+(miao&0x0f);

//miao=DS1302SingleRead(0); miao=(miao>>4)*10+(miao&0x0f);

  if (second  ==0)

     {

  

     GetRealTime(&bufTime);  //get current time

     minute=bufTime.min;minute=(minute>>4)*10+(minute&0x0f);

     hour=bufTime.hour;hour=(hour>>4)*10+(hour&0x0f);


     Show2DigitNumber(3,1,minute);

……………………


关键字:MSP430f249  读取DS1302  时钟显示  串口 引用地址:MSP430f249读取DS1302时钟显示在1602和串口

上一篇:基于MSP430的电池电压检测仿真
下一篇:MSP403单片机+TLC5615+ADC0808恒流源Proteus仿真程序设计

推荐阅读最新更新时间:2024-11-10 22:12

labview串口错误:-1073807253,-1073807252,1073676294
最近的项目中使用串口通信,FPGA和上位机实现上传和下传通信,下传数据到FPGA没有问题,但是FPGA上传数据到labview总是出错。 问题:FPGA上传数据到FPGA有时可以,有时发生错误,labview错误代码-1073807253,-1073807252,1073676294 错误原因:代码前面有负号的表示错误,没有负号的代码表示警告,和其他编程语言一样,错误必须处理,警告可能有潜在的危险,一般不处理也没有关系。 labview错误代码解释链接 , 1073807253 传输时发生成帧错误。 1073807252 传输时发生超出限度错误。 在下一个字符到达之前,未从硬件读取该字
[测试测量]
从零开始学单片机(九)串口通信
串口通信是单片机一个重要的部分,单片机和PC,单片机和单片机之间的通信大都用串口。单片机的串口是全双工异步串口通信方式。通过TXD(P3.1)发送,RXD(P3.0)引脚接收输入。串口传送数据是一帧一帧发送的,它有四种工作方式,同时也可以做并行I/O的扩展。 图上是串口的结构图。 SBUF是数据缓冲寄存器,发送和接收用的是一个地址,但是不用担心冲突,读只能从接收缓冲区,写只能在发送缓冲区里。 寄存器SCON(SM0 SM1 SM2 REN TB8 RB8 TI RI) SM0和SM1: 工作方式选择(0-3),方式1和方式3使用T1产生波特率,方式0和方式2是固定速率。 SM2 :在方式2和方式3的多级通信控制位 RE
[单片机]
从零开始学单片机(九)<font color='red'>串口</font>通信
PCIE总线四串口及打印口芯片 CH384
概述; CH384 是PCI-Express总线的四串口及打印口芯片,包含四个兼容16C550或者16C750 的异步串口和一个EPP/ECP 增强型双向并口,并且还可以外加CH438 芯片扩展最多达24 个串口。异步串口提供收发独立的256 字节FIFO 缓冲器,支持IrDA红外编解码,支持最高8Mbps的通讯波特率,可以用于PCIE 总线的RS232串口扩展、带自动硬件速率控制的PCIE 高速串口、串口组网、RS485通讯、IrDA通讯、并口/打印口扩展等。 下图为其一般应用框图; 特点; 概述 同一芯片可配置为PCIE 总线的四通道串口加并口/打印口或者四通道串口加扩展多串口。 提供两线串行主机接口,可以挂接类似24
[嵌入式]
PCIE总线四<font color='red'>串口</font>及打印口芯片 CH384
如何高效地使用51单片机串口输入输出
51单片机一般使用串口的方法都是这样的 #include reg52.h #define uint unsigned int void UART_Init(); uint num ; /* ****************************************** **函数名称:主函数 ******************************************* */ int main() { UART_Init(); while(1); } /* ***************************************** **函数功能:串口初始化函数 **************
[单片机]
MSP430F5529与LCD1602显示模块(上)
LCD1602介绍 外观 主要技术参数 显示容量: 16X2个字符 芯片工作电压: 4.5~5.5V 工作电流: 2.0mA(5.0V) 模块最佳工作电压: 5.0V 字符尺寸: 2.95X4.35(WXH)mm 接口说明 并口传输模式 VSS 电源地 VDD 电源正极(5V) V0 液晶显示偏压信号 RS 数据/命令选择端(H/L) RW 读/写选择端(H/L) E 使能信号 D0 Data I/O D1 Data I/O D2 Data I/O D3 Data I/O D4 Data I/O D5 Data I/O D6 Data I/O D7 Da
[单片机]
MSP430F5529与LCD<font color='red'>1602</font><font color='red'>显示</font>模块(上)
DS1302时钟汇编程序数码管显示时间
数码管用2个573接到p0口,电路详见单片机开发板的原理图:http://www.51hei.com/f/HL-1V6.5.pdf 段选是p0口控制的,位选是P2口控制的.;===============DS1302================== CLK EQU P1.4 RST EQU P1.0 ;1302定义引脚 IO EQU P1.2 ORG 00H JMP MAIN ;======================================= MAIN: MOV P0,#0FFH MOV P1,#0FFH MOV P2,#0FFH MOV P3
[单片机]
【STM32CubeMX】HAL库中断方式UART串口通信
HAL库下,利用STM32CubeMX生成源代码,确实比较简单,比用标准库简单很多。 现在总结自己学习的过程: 硬件平台:正点原子探索者(STM32F407ZET6) 1、配置STM32CubeMX (1)打开STM32CubeMX,选择相应的芯片型号,并配置调试信息为:Serial Wire (2)配置RCC主频,选择外部高速晶振(HSE):Crystal/Ceramic Resonator(译文:水晶/陶瓷谐振器) 然后开始配置时钟树: 外部晶振为8MHz,配置PLL使主频为168MHz,如下图: (3)配置USART1:选择异步通信模式 (4)配置串口:115200
[单片机]
【STM32CubeMX】HAL库中断方式UART<font color='red'>串口</font>通信
STM32 | 串口IAP实例分享
什么是IAP? IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 在重新编程过程中可以使用任意类型的通信协议,如UART、I2S、SPI等。这篇笔记分享的是使用UART方式IAP。 串口IAP实验 先理一理流程(本实验是以STM32F103ZET6为例): 1、实验说明 做这个实验需要准备两个keil工程,一个工程用于编写IAP程序,另一个工程用于编写我们的应用程序(要实现某些功能的程序),这里我们以一个点灯程序为例。最终,两份工程编译出来的可
[单片机]
STM32 | <font color='red'>串口</font>IAP实例分享
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved