|
|||||||||||
| 技術(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ù) |
#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樓: | >>參與討論 |
| 作者: 程序匠人 于 2005/3/30 8:09:00 發(fā)布:
使用LPC932制作的一款電表 |
|
| 3樓: | >>參與討論 |
| 作者: zemezemed 于 2005/3/30 8:15:00 發(fā)布:
好,收藏 |
|
| 4樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/3/30 22:57:00 發(fā)布:
程序匠人想說什么? |
|
| 5樓: | >>參與討論 |
| 作者: 程序匠人 于 2005/4/8 8:09:00 發(fā)布:
我想問你到底有幾篇? |
|
| 6樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/4/10 21:45:00 發(fā)布:
一個(gè)完整的項(xiàng)目是有好幾篇! |
|
| 7樓: | >>參與討論 |
| 作者: zemezemed 于 2005/4/12 8:38:00 發(fā)布:
老兄,能不能先把電量保存那一篇貼出來 |
|
| 8樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/4/12 13:57:00 發(fā)布:
使用LPC932制作的一款電表---PulseParse |
|
| 9樓: | >>參與討論 |
| 作者: zemezemed 于 2005/4/12 14:22:00 發(fā)布:
不是還有DataProtect(),LowPower()嗎? |
|
| 10樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/4/12 17:14:00 發(fā)布:
那是數(shù)據(jù)監(jiān)控程序!對(duì)表沒有功能方面的限制! 由于特殊原因就不貼出來了! 到目前已經(jīng)全部貼完! |
|
| 11樓: | >>參與討論 |
| 作者: zemezemed 于 2005/4/13 9:07:00 發(fā)布:
關(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樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/4/13 18:47:00 發(fā)布:
問的好 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 于 2005/4/14 15:22:00 發(fā)布:
有點(diǎn)明白了 1.掉電時(shí)間能有500ms,是由哪些元素決定的,我用的電源是全波整流,輸入到78L05給ADE7751還有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樓: | >>參與討論 |
| 作者: 雁舞白沙 于 2005/4/14 17:25:00 發(fā)布:
個(gè)人建議 1.掉電時(shí)間能有500ms,是由哪些元素決定的,我用的電源是全波整流,輸入到78L05給ADE7751還有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 于 2005/4/15 9:01:00 發(fā)布:
多謝指教 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è)等式是什么意思? |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |