freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

單片機(jī)如何控制以太網(wǎng)網(wǎng)卡進(jìn)行傳輸數(shù)據(jù)-資料下載頁(yè)

2025-07-07 13:04本頁(yè)面
  

【正文】 。入口調(diào)用: 將list of multicast addresses 組播地址列表(可以有多個(gè)組播地址)的地址放在。ds:si 指針里。ax為多播地址的個(gè)數(shù)。cx為字節(jié)數(shù)。return nc if we set all of them, or cy,dh=error if we didn39。t.。設(shè)置成功返回c=0,失敗c=1(c就是cy,cpu標(biāo)志位) assume ds:code mov cx,ax 。keep a count of addresses in cx. 。cx=多播地址的個(gè)數(shù) mov di,offset mcast_list_bits 。di=64位的多播地址crc xor ax,ax mov [di+0],ax mov [di+2],ax mov [di+4],ax mov [di+6],ax 。將多播地址8個(gè)字節(jié)的crc全部設(shè)置為0 jcxz set_mcl_2 。cx=0 跳到set_mc1_2,將多播地址crc設(shè)置為全部0set_mcl_1: call add_mc_bits 。調(diào)用crc計(jì)算 loop set_mcl_1set_mcl_2: call set_hw_multi 。 Set the multicast mask bits in chip 。將mcast_list_bits[8] 8個(gè)字節(jié)分別寫(xiě)入到MAR0MAR7 。mcast_list_bits[0]對(duì)應(yīng)于MAR0 . clc ret。=================add_mc_bits: 開(kāi)始計(jì)算。entry: ds:si multicast address, di sixtyfour bit multicast filter.。preserve cx, di, increment si by EADDR_LEN push cx 。保存cx,就是保存多播地址的個(gè)數(shù) mov cx,EADDR_LEN ;EADDR_LEN就是以太網(wǎng)地址的長(zhǎng)度=6 mov dx,0ffffh 。 this is msw. mov bx,0ffffh 。 set 32 bit numberadd_mcb_1: lodsb ;將一個(gè)字節(jié)的數(shù)(地址為si指向的數(shù))裝到AL里,同時(shí)使si地址+1 call upd_crc 。 update crc loop add_mcb_1 。 and loop.。============= ifdef MULTICRC_REVERSE 。ifdef 到endif這段函數(shù)是產(chǎn)生CRC過(guò)濾的反順序碼的, 。例如 0000001 反順序就是 1000000 。就是高位和低位反過(guò)來(lái)。 。程序的執(zhí)行將dh里的數(shù)反順序排列 。這段程序應(yīng)該是沒(méi)有使用,也就是說(shuō)我們用的是正順序碼。而不是反順序碼。 mov cl,8add_mcb_2: shl dh,1 。邏輯左移1位,高位進(jìn)c,地位補(bǔ)0 rcr dl,1 。帶進(jìn)位的循環(huán)右移,c進(jìn)高位,低位進(jìn)c loop add_mcb_2 mov dh,dl endif。==================== mov al,dh 。 get ms 8 bits, rol al,1 。循環(huán)左移,高位進(jìn)c和低位, rol al,1 rol al,1 。 put 3 bits at bottom and al,7 mov bl,al 。 save in bl xor bh,bh 。 make bx into an index to the byte. mov al,dh 。 get ms 8 bits, ror al,1 。循環(huán)右移,低位進(jìn)c和高位 ror al,1 。 but at bottom and al,7 mov cl,al 。 save in cl mov al,1 shl al,cl 。 set the correct bit, 。邏輯左移1位,高位進(jìn)c,地位補(bǔ)0 or [bx+di],al pop cx ret。 dx is high,。 bx is low.。 al is data。======================upd_crc: push cx mov cx,8 。 do 8 bits;cx=次數(shù) mov ah,0upd_crc1: shl bx,1 。 shift bx 。bx在最開(kāi)始時(shí)被設(shè)置為0xffff 。邏輯左移1位,高位進(jìn)c,地位補(bǔ)0 rcl dx,1 。 through dx。dx最開(kāi)始被設(shè)置為0xffff 。帶進(jìn)位循環(huán)左移,高位進(jìn)c,c進(jìn)低位 rcl ah,1 。 carry is at bottom of ah 。帶進(jìn)位循環(huán)左移,高位進(jìn)c,c進(jìn)低位 xor ah,al 。 xor with lsb of data 。邏輯異或,結(jié)果放在左邊的ah里,相同為0,不同為1 rcr ah,1 。 and put in carry bit 。帶進(jìn)位的循環(huán)右移,c進(jìn)高位,低位進(jìn)c jnc upd_crc2。 autodin is x^32+x^26+x^23x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1。 xor dx,0000010011000001b xor bx,0001110110110110b + 1 。plus one for endaround carry.upd_crc2: shr al,1 。 shift the data 。 循環(huán)右移,高位補(bǔ)0,低位進(jìn)c loop upd_crc1 pop cx ret以下是在keil c51里的c語(yǔ)言程序,為斑竹所寫(xiě)//作者laogu //程序的功能是根據(jù)多播地址multicast_address[6]的值,計(jì)算出MAR0MAR7,就是multicast_filter[8]。//本程序指計(jì)算一個(gè)多播地址。如果有多個(gè)多播地址,將每個(gè)多播地址生成的multicast_filter[8]相或就可以了,//例如根據(jù)多播地址 01:00:5e:00:00:01生成的 value1=multicast_filter[8]。//根據(jù)多播地址 01:00:5e:00:00:02生成的 value2=multicast_filter[8]。//那么對(duì)這兩個(gè)多播地址生成的multicast_filter[8]=value1 | value2 。將兩個(gè)值相或//很容易從這里得到如果要接收所有多播地址的數(shù)據(jù)包,MAR0MAR7必須設(shè)置為0xff,就是說(shuō)//multicast_filter[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}。define al define bl define cl define ah define bh define dh define ax define bx define cx define dx define shl_bx if((bxamp。0x8000)!=0){cf=1。}else{cf=0。}。bx=bx1。define shl_al if((alamp。0x80)!=0){cf=1。}else{cf=0。}。al=al1。define shr_al if((alamp。0x01)!=0){cf=1。}else{cf=0。}。al=al1。define rcl_dx if((dxamp。0x8000)!=0){cf_temp=1。}else{cf_temp=0。}。dx=dx1。if(cf){dx=dx+1。}。cf=cf_temp。define rcl_ah if((ahamp。0x80)!=0){cf_temp=1。}else{cf_temp=0。}。ah=ah1。if(cf){ah=ah+1。}。cf=cf_temp。define rcr_ah if((ahamp。0x01)!=0){cf_temp=1。}else{cf_temp=0。}。ah=ah1。if(cf){ah=ah+0x80。}。cf=cf_temp。define rol_al if((alamp。0x80)!=0){cf=1。}else{cf=0。}。al=al1。if(cf){al=al+1。}。define ror_al if((alamp。0x01)!=0){cf=1。}else{cf=0。}。al=al1。if(cf){al=al+0x80。}。union u {unsigned int word。 struct{unsigned char high。unsigned char low。}bytes。//字節(jié)順序?yàn)楦呶辉谇暗?byte結(jié)構(gòu) }。union u ax_value。union u bx_value。union u cx_value。union u dx_value。bit cf。bit cf_temp。unsigned char multicast_address[6]={0x01,0x00,0x5e,0x00,0x00,0x00}。//unsigned char multicast_address[6]={0x00,0x00,0x00,0x5e,0x00,0x01}。 //只計(jì)算一個(gè)多播地址//unsigned char multicast_address[6]={0x01,0x80,0xc2,0x00,0x00,0x00}。unsigned char multicast_filter[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}。 //結(jié)果放在這里,就是MAR0MAR7的值//。0x41,0x00,0x00,0x80,0x00,0x00,0x00,0x00。void up_crc(unsigned char al_byte){al=al_byte。ah=0。for (cx=0。cx8。cx++){shl_bx。rcl_dx。rcl_ah。ah=ah^al。rcr_ah。if(cf){ dx=dx^0x04c1。// 0000,0100,1100,0001b bx=bx^0x1db7。 //0001,1101,1011,0110b + 1 。plus one for endaround carry. }shr_al。}}void add_mc_bits(){unsigned char i。bx=0xffff。dx=0xffff。for(i=0。i6。i++){up_crc(multicast_address[i])。}cl=8。al=dh。rol_al。rol_al。rol_al。al=alamp。0x07。bl=al。bh=bh^bh。al=dh。ror_al。ror_al。al=alamp。0x07。cl=al。al=1。for(i=0。icl。i++){shl_al。}multicast_filter[bx]=multicast_filter[bx] | al。}main(){add_mc_bits()。 //計(jì)算多播地址的MAR0MAR7.while(1)。}(16)對(duì)93C46編程日期20011104作者老古 Email:zhangshenggu@內(nèi)容如果RTL8019AS使用了93C46,那么如何通過(guò)單片機(jī)對(duì)它進(jìn)行編程呢?93C46是一個(gè)有128字節(jié)的eeprom,可以是8位或16位的存儲(chǔ)模式,在RTL8019AS中,用的是16位的模式,存儲(chǔ)地址為063 .每個(gè)地址存儲(chǔ)兩個(gè)字節(jié),低位字節(jié)在前,高位字節(jié)在后(這跟單片機(jī)的存儲(chǔ)相反,單片機(jī)是高位在前,低位在后).下表是93c46存儲(chǔ)的內(nèi)容,地址是用字節(jié)表示的.設(shè)置為跳線方式,i/o地址 240h 的時(shí)候,00h03h的內(nèi)容如下:config2 01H: 0x00config1 00H: 0x96config4 03H: 0x01config3 02H: 0x10 04h09h 是6個(gè)字節(jié)的網(wǎng)卡地址,也可以修改.如果我們不使用Plug and Play方式,(比如24c02). 對(duì)93c46讀或?qū)懸玫絻蓚€(gè)寄存器,一個(gè)是RTL8019AS的命令寄存器CR,一個(gè)是第3頁(yè)的9346CR寄存器.先向CR寫(xiě)入0xE2選擇第3頁(yè)的寄存器,然后就可以通過(guò)存取9346CR來(lái)進(jìn)行93c46的讀或者寫(xiě)了.讀93C46的程序::注解:uchar 為unsigned charreg01即9346CRreg00為CR關(guān)于reg00 reg01的定義見(jiàn)我前面的相關(guān)文章.9346CR含義:對(duì)93C46讀或者寫(xiě)必須使EEM1=1 EEM0=0.EECS控制93C46的CS腳, RTL8019AS的輸出,93C46的輸入.EESK控制9
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1