亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? at45db041d.s

?? 用ATMEGA16的硬件SPI驅(qū)動(dòng)AT45DB041D
?? S
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
	.module AT45DB041D.c
	.area text(rom, con, rel)
	.dbfile E:\item\car\AT45DB041D\AT45DB041D.c
	.dbfunc e DF_Delay _DF_Delay fV
;              i -> R20,R21
;              j -> R22,R23
;              n -> R16,R17
	.even
_DF_Delay::
	xcall push_xgsetF000
	.dbline -1
	.dbline 27
; /************************************************************
; *本驅(qū)動(dòng)只用于AT45DB041D默認(rèn)頁(yè)大小為264的情況
; *頁(yè)改為256后可以有些不同
; *頁(yè)的大小只能改一次(從264改為256),不能改回
; ************************************************************/
; #include <iom16v.h>
; #include <macros.h>
; #include "AT45DB041D.h"
; #include "eeprom.h"
; 
; /************************************************************
; *SPI宏定義
; ************************************************************/
; #define  SPI_DDR    	 DDRB
; #define  SPI_PORT   	 PORTB
; 
; #define  RESET           3
; #define  SS              4
; #define  MOSI            5
; #define  MISO            6
; #define  SCK             7
; 
; /************************************************************
; *延時(shí)函數(shù)
; ************************************************************/
; void DF_Delay(unsigned int n)
; {
	.dbline 30
;   unsigned int i;
;   unsigned int j;
;   for(i=0;i<n;i++)
	clr R20
	clr R21
	xjmp L5
L2:
	.dbline 31
;   {
	.dbline 32
;     for(j=0;j<255;j++)
	clr R22
	clr R23
	xjmp L9
L6:
	.dbline 33
; 	{
	.dbline 34
; 	  asm("nop");
	nop
	.dbline 35
; 	}
L7:
	.dbline 32
	subi R22,255  ; offset = 1
	sbci R23,255
L9:
	.dbline 32
	cpi R22,255
	ldi R30,0
	cpc R23,R30
	brlo L6
X0:
	.dbline 36
;   }
L3:
	.dbline 30
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 30
	cp R20,R16
	cpc R21,R17
	brlo L2
X1:
	.dbline -2
L1:
	.dbline 0 ; func end
	xjmp pop_xgsetF000
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r n 16 i
	.dbend
	.dbfunc e SPI_Port_Init _SPI_Port_Init fV
	.even
_SPI_Port_Init::
	.dbline -1
	.dbline 42
; }
; /************************************************************
; *Init SPI Port
; ************************************************************/
; void SPI_Port_Init(void)
; {
	.dbline 43
;   SPI_DDR  |= ((1<<SS)|(1<<SCK)|(1<<MOSI));//設(shè)為輸出
	in R24,0x17
	ori R24,176
	out 0x17,R24
	.dbline 44
;   SPI_DDR  &=~ (1<<MISO);                  //設(shè)為輸入
	cbi 0x17,6
	.dbline 45
;   SPI_PORT |= (1<<SS)|(1<<SCK)|(1<<MOSI);  //輸出高電平
	in R24,0x18
	ori R24,176
	out 0x18,R24
	.dbline 46
;   SPI_PORT |= (1<<MOSI);				   //上拉
	sbi 0x18,5
	.dbline 48
; 
;   SPI_DDR|=(1<<RESET);                     //復(fù)位引腳設(shè)為輸出
	sbi 0x17,3
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPI_Init _SPI_Init fV
	.even
_SPI_Init::
	.dbline -1
	.dbline 54
; }
; /************************************************************
; *初始化SPI
; ************************************************************/
; void SPI_Init(void)//最高能到fOSC/16
; {
	.dbline 55
;   SPI_Port_Init();
	xcall _SPI_Port_Init
	.dbline 58
;   
;   //SPI使能, master模式, MSB 前,  SPI 模式 3, SCK頻率Fcl/4 平時(shí)SCK為高電平
;   SPCR |= (1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<CPOL);
	in R24,0xd
	ori R24,92
	out 0xd,R24
	.dbline 60
;   //頻率加倍
;   SPSR |= (1<<SPI2X);
	sbi 0xe,0
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPI_Start _SPI_Start fV
	.even
_SPI_Start::
	.dbline -1
	.dbline 66
; }
; /************************************************************
; *使能SPI
; ************************************************************/
; void SPI_Start(void)
; {
	.dbline 67
;  	 SPCR |= (1<<SPE);
	sbi 0xd,6
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPI_Stop _SPI_Stop fV
	.even
_SPI_Stop::
	.dbline -1
	.dbline 73
; }
; /************************************************************
; *禁止SPI
; ************************************************************/
; void SPI_Stop(void)
; {
	.dbline 74
;  	 SPCR &=~ (1<<SPE);
	cbi 0xd,6
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPI_Write_Byte _SPI_Write_Byte fV
;          cData -> R16
	.even
_SPI_Write_Byte::
	.dbline -1
	.dbline 80
; }
; /************************************************************
; *SPI send a Byte
; ************************************************************/
; void SPI_Write_Byte(unsigned char cData)
; {
	.dbline 81
;   SPDR = cData;                //write data
	out 0xf,R16
L15:
	.dbline 82
;   while(!(SPSR & (1<<SPIF)));  //wait write ok
L16:
	.dbline 82
	sbis 0xe,7
	rjmp L15
X2:
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym r cData 16 c
	.dbend
	.dbfunc e SPI_Write_Bytes _SPI_Write_Bytes fV
;              i -> R20,R21
;        DataLen -> R18,R19
;          cData -> R16,R17
	.even
_SPI_Write_Bytes::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 88
; }
; /************************************************************
; *SPI send  Bytes
; ************************************************************/
; void SPI_Write_Bytes(unsigned char *cData,unsigned int DataLen)
; {
	.dbline 90
;   unsigned int i;
;   for(i=0;i<DataLen;i++)
	clr R20
	clr R21
	xjmp L22
L19:
	.dbline 91
;   {
	.dbline 92
;     SPDR = *(cData+i);           //write data
	movw R30,R20
	add R30,R16
	adc R31,R17
	ldd R2,z+0
	out 0xf,R2
L23:
	.dbline 93
; 	while(!(SPSR & (1<<SPIF)));  //wait write ok
L24:
	.dbline 93
	sbis 0xe,7
	rjmp L23
X3:
	.dbline 94
;   }
L20:
	.dbline 90
	subi R20,255  ; offset = 1
	sbci R21,255
L22:
	.dbline 90
	cp R20,R18
	cpc R21,R19
	brlo L19
X4:
	.dbline -2
L18:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 i
	.dbsym r DataLen 18 i
	.dbsym r cData 16 pc
	.dbend
	.dbfunc e SPI_Read_Byte _SPI_Read_Byte fc
;          cData -> R16
	.even
_SPI_Read_Byte::
	.dbline -1
	.dbline 100
; }
; /************************************************************
; *SPI Read char
; ************************************************************/
; unsigned char SPI_Read_Byte(unsigned char cData)
; {
	.dbline 101
;   SPDR = cData;                //write data
	out 0xf,R16
L27:
	.dbline 102
;   while(!(SPSR & (1<<SPIF)));  //wait receive ok
L28:
	.dbline 102
	sbis 0xe,7
	rjmp L27
X5:
	.dbline 103
;   return SPDR;                 //返回?cái)?shù)據(jù)
	in R16,0xf
	.dbline -2
L26:
	.dbline 0 ; func end
	ret
	.dbsym r cData 16 c
	.dbend
	.dbfunc e Enable_DFLASH _Enable_DFLASH fV
;              i -> R16
	.even
_Enable_DFLASH::
	.dbline -1
	.dbline 109
; }
; /************************************************************
; *使能FLASH(低電平使能)
; ************************************************************/
; void Enable_DFLASH(void)
; {
	.dbline 110
;   unsigned char i=255;
	ldi R16,255
L31:
	.dbline 111
;   while(i--);			//延長(zhǎng)上一次高電平時(shí)間
L32:
	.dbline 111
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L31
X6:
	.dbline 112
;   SPI_PORT&=~(1<<SS);
	cbi 0x18,4
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e Disable_DFLASH _Disable_DFLASH fV
;              i -> R16
	.even
_Disable_DFLASH::
	.dbline -1
	.dbline 118
; }
; /************************************************************
; *禁止FLASH(高電平禁止)
; ************************************************************/
; void Disable_DFLASH(void)
; {
	.dbline 119
;   unsigned char i=255;
	ldi R16,255
	.dbline 120
;   SPI_PORT|=(1<<SS);	
	sbi 0x18,4
L35:
	.dbline 121
;   while(i--);			//延長(zhǎng)高電平時(shí)間
L36:
	.dbline 121
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L35
X7:
	.dbline -2
L34:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e DF_Read_status_Register _DF_Read_status_Register fc
;          rData -> R10
	.even
_DF_Read_status_Register::
	st -y,R10
	.dbline -1
	.dbline 130
; }
; /************************************************************
; *讀取FLASH內(nèi)部狀態(tài)寄存器
; *Bit 7:Ready/busy status (1:no busy ; 0:busy)
; *Bit 6:Compare (1: no matche ; 0:matche) 最近的一次比較結(jié)果
; *Bit 0:PAGE SIZE (1:256 bytes ; 0:264 bytes)
; ************************************************************/
; unsigned char DF_Read_status_Register(void)
; {
	.dbline 131
;   unsigned char rData=0;
	.dbline 132
;   Enable_DFLASH();
	xcall _Enable_DFLASH
	.dbline 134
; 
;   SPI_Write_Byte(Status_Register_Opcode);//write opcode
	ldi R16,215
	xcall _SPI_Write_Byte
	.dbline 136
; 
;   rData = SPI_Read_Byte(0x00);//read device's status
	clr R16
	xcall _SPI_Read_Byte
	mov R10,R16
	.dbline 138
; 
;   Disable_DFLASH();
	xcall _Disable_DFLASH
	.dbline 140
; 
;   return rData;
	mov R16,R10
	.dbline -2
L38:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r rData 10 c
	.dbend
	.dbfunc e DF_Check_Page_Size _DF_Check_Page_Size fc
;      Page_Size -> R10
	.even
_DF_Check_Page_Size::
	st -y,R10
	.dbline -1
	.dbline 147
; }
; /************************************************************
; *讀取FLASH的頁(yè)大小
; *返回1表示每一頁(yè)的大小為264 bytes,否則為256 bytes
; ************************************************************/
; unsigned char DF_Check_Page_Size(void)
; {
	.dbline 149
;   unsigned char Page_Size;
;   Page_Size=DF_Read_status_Register();
	xcall _DF_Read_status_Register
	mov R10,R16
	.dbline 150
;   if(Page_Size&0x01) return 0;
	sbrs R16,0
	rjmp L40
X8:
	.dbline 150
	clr R16
	xjmp L39
L40:
	.dbline 151
;   return 1;
	ldi R16,1
	.dbline -2
L39:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r Page_Size 10 c
	.dbend
	.dbfunc e DF_Check_Busy_State _DF_Check_Busy_State fc
;          state -> R10
;              i -> R20
	.even
_DF_Check_Busy_State::
	st -y,R10
	st -y,R20
	.dbline -1
	.dbline 157
; }
; /************************************************************
; *讀取FLASH忙標(biāo)志位(最多判斷255次,不行還是返回且返回0)
; ************************************************************/
; unsigned char DF_Check_Busy_State(void)
; {
	.dbline 159
;   unsigned char state;
;   unsigned char i=255;
	ldi R20,255
	xjmp L44
L43:
	.dbline 161
;   while(i)
;   {
	.dbline 162
;      state=DF_Read_status_Register();
	xcall _DF_Read_status_Register
	mov R10,R16
	.dbline 163
; 	 if(state & 0x80) break;		//讀取的最高位0時(shí)器件忙
	sbrs R16,7
	rjmp L46
X9:
	.dbline 163
	xjmp L45
L46:
	.dbline 164
; 	 --i;
	dec R20
	.dbline 165
;   }
L44:
	.dbline 160
	tst R20
	brne L43
X10:
L45:
	.dbline 166
;   return i;
	mov R16,R20
	.dbline -2
L42:
	.dbline 0 ; func end
	ld R20,y+
	ld R10,y+
	ret
	.dbsym r state 10 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e DF_Manufacturer_and_Device_ID _DF_Manufacturer_and_Device_ID fV
;              i -> R20
;             ID -> R10,R11
	.even
_DF_Manufacturer_and_Device_ID::
	xcall push_xgset300C
	movw R10,R16
	.dbline -1
	.dbline 175
; }
; /************************************************************
; *讀取FLASH的產(chǎn)家ID的芯片ID等內(nèi)容;
; *以下函數(shù)會(huì)返回四個(gè)值,第一個(gè)數(shù)對(duì)AT45DB041D來(lái)說(shuō)為0x1F;
; *第四個(gè)數(shù)為 0x00;
; *用此函數(shù)可以判斷芯片的好壞,是否正常;
; ************************************************************/
; void DF_Manufacturer_and_Device_ID(unsigned char *ID)
; {
	.dbline 178
;   unsigned char i;
; 
;   DF_Check_Busy_State();
	xcall _DF_Check_Busy_State
	.dbline 180
; 
;   Enable_DFLASH();
	xcall _Enable_DFLASH
	.dbline 182
; 
;   SPI_Write_Byte(Device_ID_Opcode);
	ldi R16,159
	xcall _SPI_Write_Byte
	.dbline 184
; 
;   for(i=0;i<4;i++)
	clr R20
	xjmp L52
L49:
	.dbline 185
;   {
	.dbline 186
;     ID[i] = SPI_Read_Byte(0);
	clr R16
	xcall _SPI_Read_Byte
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	std z+0,R16
	.dbline 187
;   }
L50:
	.dbline 184
	inc R20
L52:
	.dbline 184
	cpi R20,4
	brlo L49
X11:
	.dbline 189
; 
;   Disable_DFLASH();
	xcall _Disable_DFLASH
	.dbline -2
L48:
	.dbline 0 ; func end
	xjmp pop_xgset300C
	.dbsym r i 20 c
	.dbsym r ID 10 pc
	.dbend
	.dbfunc e Test_Manufacturer_ID _Test_Manufacturer_ID fc
;       Test_Buf -> y+0
	.even
_Test_Manufacturer_ID::
	sbiw R28,4
	.dbline -1
	.dbline 195
; }
; /************************************************************
; *測(cè)試FLASH產(chǎn)家ID,正常返回1,否則返回0
; ************************************************************/
; unsigned char Test_Manufacturer_ID(void)
; {
	.dbline 197
;   unsigned char Test_Buf[4];
;   DF_Manufacturer_and_Device_ID(Test_Buf);
	movw R16,R28
	xcall _DF_Manufacturer_and_Device_ID

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉影视欧美成人| 欧美精品一二三| 91精品国产综合久久精品图片| 国产女人水真多18毛片18精品视频| 午夜亚洲国产au精品一区二区| 成人高清在线视频| 精品国产123| 性做久久久久久免费观看欧美| 成人性生交大合| 精品捆绑美女sm三区| 视频在线观看国产精品| 9l国产精品久久久久麻豆| 精品国产乱码久久久久久夜甘婷婷| 亚洲午夜激情网站| 99精品视频一区| 日本一区二区三区dvd视频在线| 热久久一区二区| 欧美久久久影院| 亚洲在线观看免费| 色偷偷成人一区二区三区91| 经典三级在线一区| 欧美日韩精品是欧美日韩精品| 久久久久久久久久久99999| 日韩精彩视频在线观看| 色一情一伦一子一伦一区| 欧美国产成人精品| 激情成人综合网| 91精品国模一区二区三区| 亚洲国产精品一区二区久久| 色噜噜狠狠成人网p站| 亚洲欧洲国产日本综合| 成人动漫一区二区在线| 中文字幕高清不卡| av影院午夜一区| 国产精品久久久久影视| 成人激情综合网站| 中文字幕在线一区| a级高清视频欧美日韩| 日本一区二区三区dvd视频在线| 国产精品系列在线播放| 不卡的av网站| 91蜜桃婷婷狠狠久久综合9色| 久久精品欧美日韩| 国产精品嫩草影院av蜜臀| 欧美videos中文字幕| 狠狠色丁香婷婷综合久久片| 精品国产一区二区三区av性色 | 91片在线免费观看| 国产精品国产精品国产专区不蜜 | 久久精品国产网站| 久久在线观看免费| 国产成人丝袜美腿| 亚洲欧洲另类国产综合| 不卡电影一区二区三区| 亚洲猫色日本管| 欧美日韩在线三级| 奇米综合一区二区三区精品视频| 日韩一级免费观看| 韩国欧美国产一区| 国产精品久久久久久福利一牛影视| 99国产精品久久久久| 一区二区三区四区精品在线视频| 精品视频免费在线| 秋霞影院一区二区| 国产欧美精品区一区二区三区| 97se亚洲国产综合自在线| 亚洲精品午夜久久久| 精品国产乱子伦一区| 国产成人一区二区精品非洲| 国产女人水真多18毛片18精品视频 | 欧美激情一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 亚洲国产精品一区二区久久 | 欧美精品日韩一本| 久久se这里有精品| 日韩伦理av电影| 欧美久久一二三四区| 国内精品写真在线观看| 中文字幕中文字幕一区| 欧美夫妻性生活| 国产成人免费9x9x人网站视频| 亚洲美女视频一区| 日韩欧美在线1卡| 成人激情免费视频| 日韩影院免费视频| 国产精品国产三级国产普通话蜜臀| 欧美性色aⅴ视频一区日韩精品| 免费xxxx性欧美18vr| 国产精品久久久久aaaa樱花 | 性做久久久久久免费观看 | 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 午夜欧美一区二区三区在线播放 | 欧美日韩一级二级| 国产精品一二三四| 午夜精品久久一牛影视| 国产日韩精品一区二区三区在线| 欧美三片在线视频观看 | 另类欧美日韩国产在线| 亚洲欧美国产三级| 欧美成人a∨高清免费观看| 色综合久久久网| 久久成人综合网| 亚洲一区成人在线| 国产精品天干天干在观线| 亚洲欧美另类图片小说| 欧美一二三四在线| 色综合久久综合网欧美综合网| 韩国一区二区三区| 香蕉久久一区二区不卡无毒影院| 国产农村妇女毛片精品久久麻豆| 91精品一区二区三区久久久久久| aaa国产一区| 国产精品一二三区| 蜜桃av噜噜一区二区三区小说| 日韩理论片一区二区| 久久久久久久久一| 日韩一本二本av| 欧美无人高清视频在线观看| 一区二区成人在线观看| 91精品免费观看| 99riav一区二区三区| 经典三级一区二区| 日韩黄色小视频| 亚洲激情图片小说视频| 久久久99精品免费观看不卡| 91精品国产手机| 欧美日韩视频第一区| 99国产精品国产精品久久| 国产成人一区二区精品非洲| 美女www一区二区| 日韩一区欧美二区| 亚洲在线视频一区| 亚洲伦在线观看| 亚洲特级片在线| 综合精品久久久| 国产精品色呦呦| 国产亚洲福利社区一区| 日韩欧美亚洲另类制服综合在线| 欧美日韩美女一区二区| 色噜噜狠狠色综合中国| 色综合久久88色综合天天6| 9i在线看片成人免费| 成人av影视在线观看| 成人免费高清视频在线观看| 丁香桃色午夜亚洲一区二区三区| 国产在线观看一区二区| 国产一区二区三区在线观看精品| 久久电影网站中文字幕 | 国产精品女主播在线观看| 国产日韩欧美综合在线| 久久精品水蜜桃av综合天堂| 久久日一线二线三线suv| 欧美岛国在线观看| 精品国产在天天线2019| 欧美精品一区二区三区蜜臀 | 欧美日韩精品一区二区三区蜜桃| 欧美在线观看一区二区| 在线观看av一区| 国产精品一二三| 久久机这里只有精品| 六月丁香综合在线视频| 久久99久国产精品黄毛片色诱| 久久不见久久见免费视频1| 国产一区二区三区最好精华液| 国内成人免费视频| 国产成人免费在线观看| 国产91精品一区二区麻豆网站| 国产99久久久国产精品潘金| 成人免费毛片高清视频| 亚洲综合图片区| 欧美伊人久久大香线蕉综合69| 欧美日韩电影一区| 欧美一区二区三区四区久久| 欧美成人国产一区二区| 久久久三级国产网站| 国产精品嫩草久久久久| 亚洲欧美区自拍先锋| 亚洲超碰精品一区二区| 久久精品国产99国产| 国产大陆亚洲精品国产| 91免费看`日韩一区二区| 欧美亚洲综合网| 日韩欧美中文字幕制服| 久久久蜜臀国产一区二区| 国产精品区一区二区三| 亚洲乱码国产乱码精品精的特点 | 亚洲国产aⅴ成人精品无吗| 石原莉奈一区二区三区在线观看| 美女一区二区三区| 国产成人亚洲综合a∨婷婷图片| av亚洲精华国产精华精| 欧美日韩一本到| 久久色.com| 亚洲综合免费观看高清完整版在线| 日本一区中文字幕| 国产激情91久久精品导航 | 不卡av在线免费观看| 欧美日韩不卡在线| xf在线a精品一区二区视频网站| ...中文天堂在线一区|