音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

使用LPC932制作的一款電表---TimeSpend

作者:雁舞白沙 欄目:MCU技術(shù)
使用LPC932制作的一款電表---TimeSpend
#include <REG932.H>
#include <define.h>
#include <Stdio.h>
#include <Intrins.h>

void TimeSpend(void)
{
   unsigned CHAR data i,k=0x80;
   if(TimeSpendFg)
   {
       TimeBuf[0]=IicByteRead(0x64,0x00) & 0x7f;//提取秒信號(hào)到數(shù)據(jù)緩沖區(qū)
       TimeBuf[1]=IicByteRead(0x64,0x10) & 0x7f;//提取分號(hào)到數(shù)據(jù)緩沖區(qū)
       TimeBuf[2]=IicByteRead(0x64,0x20) & 0x3f;//提取時(shí)號(hào)到數(shù)據(jù)緩沖區(qū)
       DaysBuf[0]=IicByteRead(0x64,0x30) & 0x07;//提取期信號(hào)到數(shù)據(jù)緩沖區(qū)
       DaysBuf[1]=IicByteRead(0x64,0x40) & 0x3f;//提取日信號(hào)到數(shù)據(jù)緩沖區(qū)
       DaysBuf[2]=IicByteRead(0x64,0x50) & 0x1f;//提取月信號(hào)到數(shù)據(jù)緩沖區(qū)
       DaysBuf[3]=IicByteRead(0x64,0x60)       ;//提取年信號(hào)到數(shù)據(jù)緩沖
       
       for(i=0;i<12;i++)
       {
               IicMuchByteRead(0xa0,k,0x03);
               //小時(shí)比較
               if(TimeBuf[2]==IIcBuf[1])
            {
                //分鐘比較
                   if(TimeBuf[1]>=IIcBuf[2])
                {
                    SWITCH(IIcBuf[0])
                    {
                        case 0x01 : //時(shí)段---尖
                                    MataStData=MataStData|0x01;
                                    //IicByteWrite(0xa0,0xc9,MataSt);
                        break;
                        case 0x02 : //時(shí)段---峰
                                    FengLed=0;//打開峰指示燈
                                    PingLed=1;
                                    GuLed=1;
                                    MataStData=MataStData|0x02;
                                    //IicByteWrite(0xa0,0xc9,MataSt);                                
                                    FengFg=1;
                                    PingFg=0;
                                    GuFg=0;
                        break;
                        case 0x03 : //時(shí)段---平
                                    FengLed=1;
                                    PingLed=0;//打開平指示燈
                                    GuLed=1;
                                    MataStData=MataStData|0x03;
                                    //IicByteWrite(0xa0,0xc9,MataSt);
                                    FengFg=0;
                                    PingFg=1;
                                    GuFg=0;
                        break;
                        case 0x04 : //時(shí)段---谷
         
2樓: >>參與討論
程序匠人
使用LPC932制作的一款電表
 
3樓: >>參與討論
zemezemed
好,收藏
 
4樓: >>參與討論
雁舞白沙
程序匠人想說什么?
 
5樓: >>參與討論
程序匠人
我想問你到底有幾篇?
 
6樓: >>參與討論
雁舞白沙
一個(gè)完整的項(xiàng)目是有好幾篇!
 
7樓: >>參與討論
zemezemed
老兄,能不能先把電量保存那一篇貼出來
 
8樓: >>參與討論
雁舞白沙
使用LPC932制作的一款電表---PulseParse
 
9樓: >>參與討論
zemezemed
不是還有DataProtect(),LowPower()嗎?
 
10樓: >>參與討論
雁舞白沙
那是數(shù)據(jù)監(jiān)控程序!對(duì)表沒有功能方面的限制!

由于特殊原因就不貼出來了!

到目前已經(jīng)全部貼完!

11樓: >>參與討論
zemezemed
關(guān)于數(shù)據(jù)保存
在你的程序里面,電量是間隔15分鐘存一次?掉電檢測處理也是在主程序里面?掉電之后在主程序里檢測再處理會(huì)不會(huì)來不及?
我想用掉電中斷的方法,電量整數(shù)在整數(shù)加1事件發(fā)生的時(shí)存到EEPROM,發(fā)生掉電的時(shí)候,把電量整數(shù),電量小數(shù),電量脈沖都存到EEPROM里,上電的時(shí)候再恢復(fù)。
但我有幾個(gè)疑問:1.掉電處理能有多少時(shí)間?
               2.在主程序里,正保存電量整數(shù)的時(shí)候,發(fā)生掉電,這時(shí)候我要判斷總線是否忙,這是通過檢測SDA,SCL線是不是低電平嗎?
               3.不管總線是否忙,EEPROM都有可能在進(jìn)行檫寫操作,那在掉電中斷子程序里是不是要延時(shí)10ms?那還有時(shí)間進(jìn)行電量保存嗎?
               4.有可能在掉電時(shí),有一個(gè)脈沖還沒處理,這個(gè)脈沖是在掉電程序里累計(jì)還是也保存到EEPROM里面上電后再累計(jì)?如果是在掉電程序里加,我還是怕時(shí)間不夠.

上面的問題,主要是我對(duì)數(shù)據(jù)怎么保存才能不丟脈沖的方法沒有概念,老兄,能不能給我講講?

12樓: >>參與討論
雁舞白沙
問的好
1.掉電處理能有多少時(shí)間?

答:我的硬件設(shè)計(jì)掉電時(shí)間留給MCU的時(shí)間是500mS.時(shí)間是足夠了!

2.在主程序里,正保存電量整數(shù)的時(shí)候,發(fā)生掉電,這時(shí)候我要判斷總線是否忙,這是通過檢測SDA,SCL線是不是低電平嗎?

答:在主程序里面在保存電量的時(shí)候是禁止所有的中斷.因?yàn)槲矣幸陨?00mS的充足時(shí)間.而且保存電量是很段的時(shí)間!

3.不管總線是否忙,EEPROM都有可能在進(jìn)行檫寫操作,那在掉電中斷子程序里是不是要延時(shí)10ms?那還有時(shí)間進(jìn)行電量保存嗎?

答:主要看程序的結(jié)構(gòu),我的結(jié)構(gòu)是防止出現(xiàn)總線忙的狀態(tài)!因?yàn)槊總(gè)IIC的操作都留下了足夠的時(shí)間!

4.有可能在掉電時(shí),有一個(gè)脈沖還沒處理,這個(gè)脈沖是在掉電程序里累計(jì)還是也保存到EEPROM里面上電后再累計(jì)?如果是在掉電程序里加,我還是怕時(shí)間不夠.

答:全部在掉電程序里面保存!時(shí)間很快的.而且要保存的數(shù)據(jù)很少,只有32個(gè)字節(jié).一般100MS足夠了!

13樓: >>參與討論
zemezemed
有點(diǎn)明白了
1.掉電時(shí)間能有500ms,是由哪些元素決定的,我用的電源是全波整流,輸入到78L05ADE7751還有MCU供電,在78L05兩端都有470UF的電解電容,在整流橋輸出電壓上用47K+10K電阻分壓送到LPC764的比較器口進(jìn)行比較。
2你說禁止一切中斷,又說電量保存是很短的時(shí)間,24LC16保存數(shù)據(jù)需要10ms,也就是說在這段時(shí)間里,串口不能接收,那會(huì)不會(huì)影響通訊?我現(xiàn)在處理是只禁止了掉電中斷,可行嗎?
3.整個(gè)程序的結(jié)構(gòu)就是查詢方式,中斷有這么幾個(gè):串口,掉電,脈沖,485通信通道變更。脈沖200ms來一次,串口隨時(shí)可能有中斷,如果開始接收就必須1ms中斷一次,否則要通訊失敗,485通訊也類似。我在想,既然脈沖200ms來一次,那么,在最忙的時(shí)候(主要是通訊處理)必須在200ms以內(nèi)處理完,應(yīng)該可以辦到吧?
4.我是用一個(gè)電源的,所以ADE7751的CF輸出口直接接到LPC764的外部中斷口,因?yàn)镃F口是上跳變,而外部中斷采樣的是下跳變,也就是說,在每次CF上跳變之后大約80ms(高電平寬度)才能產(chǎn)生中斷,我想,在這80ms里面有可能掉電,那么脈沖就丟了!根據(jù)你說的第2點(diǎn),在電量保存的時(shí)候關(guān)中斷,就沒有必要在掉電中斷里面判斷是否有脈沖沒有處理,但如果象上面的情況還是必須要判斷,而且要保存電量整數(shù),這樣處理的話,應(yīng)該不會(huì)丟脈沖了吧?前提是脈沖外部中斷必須設(shè)為優(yōu)先級(jí)最高。


這幾點(diǎn)是我今天想的,希望老兄給點(diǎn)意見

14樓: >>參與討論
雁舞白沙
個(gè)人建議
1.掉電時(shí)間能有500ms,是由哪些元素決定的,我用的電源是全波整流,輸入到78L05ADE7751還有MCU供電,在78L05兩端都有470UF的電解電容,在整流橋輸出電壓上用47K+10K電阻分壓送到LPC764的比較器口進(jìn)行比較。

答:個(gè)人不贊同使用查詢 的 方式來判斷掉電!最好使用中斷。等掉電中斷來了 的 時(shí)候。不管什么操作都的停下來!進(jìn)行數(shù)據(jù)保存工作!脈沖是可以丟失一個(gè)的!

4:忽略

答:采用下降雁沿觸發(fā)中斷的方式!


另外提示你:

在電表的程序里面,最好不要采用查詢的方式 來處理個(gè)個(gè)子程序!

最好采用中斷加中斷標(biāo)志狀態(tài)字的 方式來運(yùn)行子程序!

15樓: >>參與討論
zemezemed
多謝指教
1.是使用的中斷,764有模擬比較器,比較器狀態(tài)翻轉(zhuǎn)就觸發(fā)了中斷,上電的時(shí)候,要不要判斷電源電壓是否穩(wěn)定?

2.掉電中斷除了在電量保存的時(shí)候中斷禁能,別的時(shí)候都是使能的?還是想問一下,在電量保存的時(shí)候,禁止所有中斷的好處

3.脈沖可以丟一個(gè),而電量保存是禁止掉電中斷的,那在掉電中斷程序里面有沒有必要判斷有沒有脈沖沒有處理?如果不用,那就只要保存電量小數(shù),還有小于16的脈沖個(gè)數(shù)了吧。

4.明白

5.我是用中斷加中斷標(biāo)志狀態(tài)字方法處理的,看了你的程序怎么也懂了一點(diǎn)。

6.在你的主程序里,顯示處理放在最前面,接著是通訊處理,接著是脈沖采集處理,在接著是通訊數(shù)據(jù)禎處理,我注意到通訊處理是分開的,這么處理是有什么考慮,還是隨便?

7.我在保存電量整數(shù)的時(shí)候是分到兩個(gè)地方寫的,并且加了校驗(yàn)和,在上電的時(shí)候讀取兩組數(shù)據(jù)并校驗(yàn),比較兩組數(shù)據(jù)的大小,再恢復(fù)大的一組,這樣可靠嗎?而在掉電寫電量小數(shù)就寫到一個(gè)地方,也沒有校驗(yàn)和。我要顯示的電量是6位整數(shù),2位小數(shù)。

8.你的程序有這么一段

void InitCmd(void)
{
   unsigned CHAR data ii;
   if((PowerStA==0x55)|(PowerStB==0xAA))
   {
       PowerStA==0x55;
       PowerStB==0xAA;
   }
   ......
   ......
   ......
我不知道這兩個(gè)等式是什么意思?

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
疑問?LPC922 P3.0,P3.1開漏輸出上拉不了5V,實(shí)測4V左右。
貼芯的關(guān)懷,單片機(jī)熱門外圍器件 指南.......
請(qǐng)教:936的AD的電壓基準(zhǔn)是什么?。
請(qǐng)教一個(gè)89v51rd2的ISP問題?
周立功  怎么 不公開Mini 下載線 的電路圖
免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)