〖說明〗24LC65 I2C EEPROM字節讀寫驅動程序,芯片A0-A1-A2要接VCC。 現缺頁寫、頁讀,和CRC校驗程序。以下程序經過50臺驗證,批量的效果有待考 察。 為了安全起見,程序中很多nop是冗余的,希望讀者能進一步精簡,但必須經過驗 證。
上傳時間: 2016-01-24
上傳用戶:lixinxiang
123456uyygbb溫度傳感器ds1820 的匯編程序 晶振:12M TEMPER_L EQU 36H TEMPER_H EQU 35H TEMPER_NUM EQU 60H FLAG1 BIT 00H DQ BIT P3.3 AAA:MOV SP,#70H LCALL GET_TEMPER LCALL TEMPER_COV LJMP AAA nop ------------------讀出轉換后的溫度值 GET_TEMPER: SETB DQ 定時入口 BCD:LCALL INIT_1820 JB FLAG1,S22 LJMP BCD 若DS18B20不存在則返回 S22:LCALL DELAY1 MOV A,#0CCH 跳過ROM匹配------0CC LCALL WRITE_1820 MOV A,#44H 發出溫度轉換命令 LCALL WRITE_1820
標簽: EQU TEMPER_NUM TEMPER_L TEMPER_H
上傳時間: 2013-12-26
上傳用戶:ainimao
RISC狀態機由三個功能單元構成:處理器、控制器和存儲器。 RISC狀態機經優化可實現高效的流水線操作。 RISC 中的數據線為16位。 在數據存儲器中的0到15的位置放置16個隨機數,求16個數的和,放在數據存儲器的16、17的位置,高位在前 對這16個數進行排序,從大到小放置在18到33的位置 求出前16個數的平均數,放在34的位置 基本指令有nop, ADD, SUB, AND, RD, WR, BR,BC。 因為采用16位指令,有擴充的余地。
上傳時間: 2013-11-29
上傳用戶:縹緲
本模擬I2C軟件包包含了I2C操作的底層子程序,使用前要定義 好SCL和SDA。在標準8051模式(12 Clock)下,對主頻要求是不高于12MHz(即1個 機器周期1us) 若Fosc>12MHz則要增加相應的nop指令數。(總線時序符合I2C標 準模式,100Kbit/S)。
上傳時間: 2013-12-08
上傳用戶:ruixue198909
unsigned char WriteInData(unsigned char Address,unsigned char DataByte) { unsigned char mark WREN() Write_Byte(0x02) Write_Byte(Address) Write_Byte(DataByte) //nop() X25_cs=1 lag(3000) mark=Read_Byte(Address) if(DataByte==mark) SystemError=0 if(mark!=DataByte) SystemError=1 // return(SystemError) } //雖然是一讀一寫,但是其中暗藏殺機,讓人很難調通。一定注意接口的位置!呵呵!不信你就按普通的SPI程序方法寫寫試試!
標簽: unsigned char WriteInData DataByte
上傳時間: 2016-12-14
上傳用戶:invtnewer
虛擬I2C總線匯編程序軟件包 I2C 軟件包的底層子程序,使用前要定義好SCL和SDA。在標準80C51模式(12 Clock)下,對主頻要求是不高于12MHz(1個機器周期1us)若Fosc>12MHz,則要增加相應的nop指令數。在使用本軟件包時,請在你的程序的未尾加入$INCLUDE (VI2C_ASM.ASM)即可。
上傳時間: 2014-12-01
上傳用戶:yimoney
MCS-51單片機模擬I2C軟件包本模擬I2C軟件包包含了I2C操作的底層子程序,使用前要定義 好SCL和SDA。在標準8051模式(12 Clock)下,對主頻要求是不高于12MHz(即1個 機器周期1us) 若Fosc>12MHz則要增加相應的nop指令數。(總線時序符合I2C標 準模式,100Kbit/S)
上傳時間: 2014-11-04
上傳用戶:wang5829
程序所在目錄:ex6_AD 板上引出的兩路A/D 轉換對應DSP 的A/D 模塊分別是通道0 和通道8,輸入電壓0-5V 。 本開發板使用DA 的輸出作為AD 的輸入,因此需將5J2 的1-2,3-4 分別用短路子短接。 打開CC2000,進行如下操作: 1.Project->Open ,打開該目錄中的工程文件。 2.Project->Rebuild ALL,編譯鏈接 3.File->Load Program 4.光標移到Que()函數的asm(" nop ")所處的行。 5. Debug->Toggle breakpoint (快捷鍵F9) 6. Debug->Animate (快捷鍵F12) 7. View->Watch Window ,在出現的watch 窗體中點右鍵分別插入變量AD_SIG0,AD_SIG8,則可看到所采到的這兩路信號的電壓值。 如果結果稍微不精確,請不要在意,這可能是因為沒有采用專用基準源,以及信號不穩定的緣故。另外,TMS320LF2407 的內置A/D 的精度并不是很高。在前面兩種情況已得到保證的情況下,變化幅度仍較大。( ^_^ 呵呵,外面好一點的一片A/D 芯片就不低于100 塊,所以想想能湊合著用也就可以了。)
上傳時間: 2013-12-17
上傳用戶:refent
/**************************************************************** 外部晶振8M PA0~3:四位數碼管的位選 PB0~7:數碼管的8位段選 外部中斷0用于計數 定時器0溢出中斷的定時為1ms 說明 :檢測到水流較小時,繼電器延時1秒關閉 ******************************************************************/ #include<iom16v.h> #include<macros.h> #define uchar unsigned char #define uint unsigned int char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //數碼管段選 char position[4]={0xfe,0xfd,0xfb,0xf7};//數碼管位選 uint sumnum=0; //用于記錄1000ms內進入中斷的次數 uint time=0; //記錄進入比較定時器0的次數 uint num=0; //記錄1ms內進入中斷的次數 uint count=0; //進入外部中斷0的次數 uchar flag; uint sumnum1; //記錄100ms內的數目 /***************************函數聲明***************************/ void delay(); void display(uint m ); void init(); void init_0(); void init_2(); void _delay_us(uint l) { unsigned int i; for(i=0;i<l;i++) { asm("nop"); } } /**************************主函數***********************************/ void main() { init(); init_0(); init_2(); while(sumnum<5) { PORTD=0XBF; segdisplay(sumnum1); } while(1) { segdisplay(sumnum1); } } /*************************掃描數碼管時的延時函數*********************/ void delay() { uchar i,j; for(i=6;i>0;i--) for(j=225;j>0;j--); } /************************數碼管顯示函數*****************************/ void segdisplay( int temp) { int seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int temp1,temp2,temp3,temp4; temp1=temp/1000; temp2=(temp/100)%10; temp3=(temp/10)%10; temp4=temp%10; DDRB=0xff; DDRA|=0x0f; PORTA=~BIT(3); PORTB=seg[temp1]; _delay_us(100); PORTA=~BIT(2); PORTB=seg[temp2]; _delay_us(100); PORTA=~BIT(1); PORTB=seg[temp3]; _delay_us(100); PORTA=~BIT(0); PORTB=seg[temp4]; _delay_us(100); } /***********************管腳初始化函數*********************/ void init() { DDRD|=0X40; //PD4 設置為輸出 PORTD=0XBF; DDRA=0XFF; DDRB=0XFF; PORTA=0XFF; PORTB=0XFF; } /***********************外部中斷0初始化*********************/ void init_0() { MCUCR=0X02; //INT0為下降沿觸發 GICR=0X40; //使能INT0中斷 SREG=0X80; //使能總中斷 } /**********************定時器2初始化***********************/ void init_2() { TCCR0=0x03; // 內部時鐘,64 分頻(8M/64=125KHz) TCNT0=0x83; //裝初值 TIMSK=0x01; // 允許 T/C0溢出中斷中斷 } /***********************外部中斷0子函數********************/ #pragma interrupt_handler int0_isr:2 void int0_isr(void) { count++; } /*********************定時計數器0溢出中斷子函數*****************/ #pragma interrupt_handler int0_over:10 void int0_over(void) { TCNT0=0x83; //重裝初值 if((time%100) == 0) sumnum1 = num; if(time == 1000) { sumnum=num; if(sumnum<10) { if((flag==1)&&(sumnum<10)) { PORTD=0XFF; flag=0; } flag++; } else PORTD=0XBF; num=0; time=0; } num+=count; count=0; ++time; }
標簽: C語言
上傳時間: 2016-03-09
上傳用戶:彥 yan