1. 想讓51單片機實現上網,網路通訊,有需要哪些東西
上網?什麼情況兄弟
你直接說你想達到什麼目的
幾乎不可能跟電腦那樣上網。
通訊的話可以用手機通過藍牙或者Wi-Fi控制單片機,或者無線電和紅外線。
2. 關於51單片機
51單片機即是基礎入門的一個單片機
還是應用最廣泛的一種。
學單片機不從51學起就等於不會加減法直接學乘除法一樣,即使費盡學會了乘除法基礎也不牢。
如果什麼都不會的話可以在網上搜索單片機的視頻教程。下面是網址
http://www.gougou.com/search?search=%E5%8D%95%E7%89%87%E6%9C%BA%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B&restype=-1&sortby=6&suffix=&id=10000001&f=&ty=0&pattern=0
3. 51單片機
正好~西科大實驗室認證後的答案:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint num,ge,shi,num1;
uchar code table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void new();
void Delay(uint x);
void show();
void main()
{
TMOD = 0x10;
TH1 = (65536-45872)/256;
TL1 = (65536-45872)%256;
EA=1;
ET1=1;
TR1 = 1;
while(1)
{
new();
if(num1==100)
{
num1=0;
}
show();
}
}
void time() interrupt 3
{
TH1 = (65536-45872)/256;
TL1 = (65536-45872)%256;
num++;
}
void new()
{ uint a;
a=100*(shi+1);
if(num*50>=a)
{
num=0;
num1++;
}
} void Delay(uint x)
{
uint i,j;
for(i=0; i<x; i++)
for(j=0; j<110; j++)
;
}
void show()
{
ge=num1%10;
shi=num1/10;
Delay(5);
P0 = 0;
P2 = 0x02;
P0 = table[ge];
Delay(5);
P0 = 0;
P2 = 0x01;
P0 = table[shi];
}
4. STC89C51單片機可以聯網嗎
ENC89C51是什麼鬼,網上怎麼查不到呢?也是單片機嗎,是NEC公司的?
51單片機要聯網,是要聯互聯網嗎?還是:只是STC89C51與ENC89C51這兩個鬼聯網?如果就是兩個單片機,可以用串口通信的,不叫聯網。
通常說的聯網,是指上互聯網。按理說,51單片機要配上網路晶元是可以上網的,但是,因為51單片機的速度太慢了,在軟體上還要用操作系統來支持,這樣,在51單片機上跑操作系統本就困難了,再上網就更加的難以實現了。那速度慢的難以相信。
5. 51單片機網站
這是我根據自己的單片機設計的程序。請根據自己的需要修改各個參數。
org 0000H
ajmp begin
org 000BH;時鍾中斷0入口
mov tl0,#00000B;每次中斷設初值
mov th0,#110B
ajmp time0;轉跳到定時器0子程序
org 0040H
begin:;初始化部分
;設置變數RAM位置
x equ 50H
y equ 51H
z equ 52H
times equ 53H;此變數是中斷次數,只有中斷250次,才能積累2M個機器周期,即1秒鍾,
rtimes equ 54H
wtimes1 equ 55H
wtimes2 equ 56H
;設置字型碼
mov 60H,#005H;0
mov 61H,#0DDH;1
mov 62H,#046H;2
mov 63H,#054H;3
mov 64H,#09CH;4
mov 65H,#034H;5
mov 66H,#024H;6
mov 67H,#05DH;7
mov 68H,#004H;8
mov 69H,#014H;9
mov 5FH,#0FEH;-
;設置各LED位數字的RAM單元
n8 equ 71H
n7 equ 72H
n6 equ 73H
n5 equ 74H
n4 equ 75H
n3 equ 76H
n2 equ 77H
n1 equ 78H
;設置數位選線的位置
l8 bit p3.0
l7 bit p3.6
l6 bit p3.5
l5 bit p3.7
l4 bit p3.1
l3 bit p3.2
l2 bit p3.3
l1 bit p3.4
;設置定時器
setb ea
setb et0
mov th0,#11111111B
mov tl0,#11111B
clr tr0
mov p3,#00H
start:;r2-小時/r3-分鍾/r4-秒/r1是按鍵的值,無按鍵時為10H
mov r2,#00
mov r3,#00
mov r4,#00
;第3、6位顯示橫線「-」
mov n6,5FH
mov n3,5FH
main:;主程序
mov r1,#10H;r1賦10H,沒按鍵
acall chcut;調用r2-r4值轉換為字型碼並存入n1-n8的子程序
acall show;掃描一遍LED
acall key;調用鍵盤掃描子程序(此程序在51dz提供的程序上略加修改,保留注釋)
jb tr0,walkstop;若在走時,不允許調時,跳到walkstop
cjne r1,#4,s2;若r1不是4則跳到下一個計時部分s2(下同)
acall hinc;調用小時加1子程序
acall chcut
acall longdelay;調用長延時子程序
ajmp main;此次設置完成,跳到主程序
s2:
cjne r1,#5,s3
acall minc;調用分鍾加1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s3:
cjne r1,#6,s4
acall sinc;調用秒加1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s4:
cjne r1,#7,s5
acall hdec;調用小時減1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s5:
cjne r1,#8,s6
acall mdec;調用分鍾減1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s6:
cjne r1,#9,s7
acall sdec;調用秒減1子程序
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
s7:
cjne r1,#0,walkstop
mov r2,#0;時分秒清0
mov r3,#0H
mov r4,#0H
acall chcut
acall longdelay
ajmp main;此次設置完成,跳到主程序
walkstop:
cjne r1,#11,s0
acall stop;調用停止走時子程序
ajmp main;此次設置完成,跳到主程序
s0:
cjne r1,#12,main
acall walk;調用開始走時子程序
ajmp main;此次設置完成,跳到主程序
;以下是子程序
show:;掃描子程序
mov p1,n8;將第8位數字型碼送上P1(下同)
setb l8;使第8位LED亮
acall delay;調用掃描延時子程序
clr l8;使第8位LED滅
mov p1,n7
setb l7
acall delay
clr l7
mov p1,n6
setb l6
acall delay
clr l6
mov p1,n5
setb l5
acall delay
clr l5
mov p1,n4
setb l4
acall delay
clr l4
mov p1,n3
setb l3
acall delay
clr l3
mov p1,n2
setb l2
acall delay
clr l2
mov p1,n1
setb l1
acall delay
clr l1
ret
hdec:
cjne r2,#0,hdnext;如果小時不是0就到hdnext
jnb tr0,hskip;小時是0且tr0是0即不在計時,到hskip
acall warning;小時是0且tr0是1即在計時,就調用報警子程序
clr tr0;停止計時
ret;返回
hskip:mov r2,#100;小時是0又不在計時,就讓r2賦100,到下一些條減1後就是59
hdnext:dec r2;如果小時不是0就到這里減1
ret
mdec:;分鍾減1子程序
cjne r3,#00,mdnext;如果分鍾不是0就到minext
mov r3,#60;如果分鍾是0就到變為60,到下一些條減1後就是59
acall hdec;從小時退位
mdnext:dec r3;如果分鍾不是0就到這里減1
ret
sdec:;秒減1子程序
cjne r4,#00,sdnext;如果秒不是0就到sdnext
mov r4,#60;如果秒是0就到變為60,到下一些條減1後就是59
acall mdec;從分鍾退位
sdnext:dec r4;如果秒不是0就到這里減1
ret
hinc:;小時加1子程序
cjne r2,#99,hinext;如果小時不是99就到hinext
mov r2,#255;如果小時是23就到變為255,到下一些條加1後就是0
hinext:inc r2;如果小時不是99就到這里加1
ret
minc:
cjne r3,#59,minext;如果分鍾不是23就到minext
mov r3,#255;如果分鍾是59就到變為255,到下一些條加1後就是0
acall hinc;分鍾滿,向小時進位
minext:inc r3;如果分鍾不是59就到這里加1
ret
sinc:
cjne r4,#59,sinext;如果秒不是23就到sinext
mov r4,#255;如果是秒是59就到變為255,到下一些條加1後就是0
acall minc;秒滿,向分鍾進位
sinext:inc r4;如果秒不是59就到這里加1
ret
chcut:;將r2-r4值轉換為字型碼並存入n1-n8的子程序
mov a,r2;小時值送Acc(下同)
mov b,#10;B賦10
div ab;AB相除,此時A是小時的十位,B是小時的個位
mov n7,b;小時的個位B送第七位數
mov n8,a;小時的十位A送第八位數
mov a,r3;分解分鍾到第四、五位數
mov b,#10
div ab
mov n4,b
mov n5,a
mov a,r4;分解秒到第一、二位數
mov b,#10
div ab
mov n1,b
mov n2,a
;以下開始轉換各數位的二進制數到字型碼(第6、3位是橫線,由定時器控制有無)
mov a,n8;第8位數送Acc(下同)
add a,#60H;Acc加60H,此時Acc中值所指的RAM地址中為第8位數的字型碼
mov r0,a;Acc送r0
mov n8,@r0;r0間接地址送回n8
mov a,n7;轉換第7位數
add a,#60H
mov r0,a
mov n7,@r0
mov a,n5;轉換第5位數
add a,#60H
mov r0,a
mov n5,@r0
mov a,n4;轉換第4位數
add a,#60H
mov r0,a
mov n4,@r0
mov a,n2;轉換第2位數
add a,#60H
mov r0,a
mov n2,@r0
mov a,n1;轉換第1位數
add a,#60H
mov r0,a
mov n1,@r0
ret
longdelay:;長延時子程序
mov r6,#0FFH
reshow1:acall show
djnz r6,reshow1
mov r6,#0FFH
reshow2:acall show
djnz r6,reshow2
ret
delay:;掃描延時子程序
mov r5,#40H
djnz r5,$
ret
ringdelay:mov r5,#0FFH
djnz r5,$
ret
time0:;定時器0子程序
push Acc;Acc壓棧
mov a,times;已中斷次數送Acc
inc a;次數加1
mov times,a;加1後送回次數變數
cjne a,#250,gotoend;如果Acc不是250說明不到1秒,跳過加秒操作
mov times,#0;是250說明到1秒了,次數變數清0
mov n6,#0FFH;第3、6位清除橫線「-」
mov n3,#0FFH
acall sdec;調用秒減1子程序
ajmp next;退出
gotoend:cjne a,#125,next;若Acc不是125就退出
mov n6,5FH;若是125就給第3、6位顯示5FH中的字型碼橫線「-」
mov n3,5FH
next:pop Acc;退出時,從棧中彈出Acc
reti;此程序中次數在0-124就不顯示橫線,在125-250就顯示橫線
walk:;開始走時子程序
setb tr0
ret
stop:;停止走時子程序
clr tr0
ret
warning:;報警子程序
;放入-FINISH-字型碼
mov n8,#0FEH;-
mov n7,#02EH;F
mov n6,#0DDH;I
mov n5,#00DH;N
mov n4,#0DDH;I
mov n3,#034H;S
mov n2,#08CH;H
mov n1,#0FEH;-
mov wtimes1,#50;設置蜂鳴次數50次
res1:mov wtimes2,#08FH;一次蜂鳴開始
res2:clr p2.0;從此句開始蜂鳴器發聲
mov p3,#0H;LED熄滅
mov r6,#5;掃描延時子程序延時太短,要重復5次
redelay:acall delay;此2句重復5次
djnz r6,redelay
setb p2.0
djnz wtimes2,res2;轉到RES2讓蜂鳴器發聲,轉wtimes2次,即8FH次
mov p3,#0H;從此句開始蜂鳴器不發聲
mov r7,#08FH;LED掃描次數
reshow:acall show
djnz r7,reshow;LED掃描08FH次,即不發聲延時
djnz wtimes1,res1;到RES1開始一次蜂鳴
finish:acall show;這兩句使LED顯示,並進入死循環
ajmp finish
key:mov p0,#00001111b;上四位和下四位分別為行和列,所以送出高低電壓檢查有沒有按鍵按下
jmp k10;跳到K10處開始掃描,這里可以改成其它條件轉移指令來決定本次掃描是否要繼續,例如減1為0轉移或者位為1或0才轉移,這主要用來增加功能,確認上一按鍵功能是否完成?是否相當於經過了延時?是否要封鎖鍵盤?
goend:jmp kend;如果上面判斷本次不執行鍵盤掃描程序,則立即轉到程序尾部,不要浪費CPU的時間
k10:jb p0.0,k20;掃描正式開始,先檢查列1四個鍵是否有鍵按下,如果沒有,則跳到K20檢查列2
k11:mov p0,#11101111b;列1有鍵按下時,P0.0變低,到底是那一個鍵按下?現在分別輸出各行低電平
jb p0.0,k12;該行的鍵不按下時,p0.0為高電平,跳到到K12,檢查其它的行
mov r1,#13;如果正好是這行的鍵按下,將寄存器R0寫下1,表示1號鍵按下了
k12:mov p0,#11011111b
jb p0.0,k13
mov r1,#15;如果正好是這行的鍵按下,將寄存器R0寫下2,表示2號鍵按下了
k13:mov p0,#10111111b
jb p0.0,k14
mov r1,#0;如果正好是這行的鍵按下,將寄存器R0寫下3,表示3號鍵按下了
k14:mov p0,#01111111b
jb p0.0,kend;如果現在四個鍵都沒有按下,可能按鍵松開或干擾,退出掃描(以後相同)
mov r1,#14;如果正好是這行的鍵按下,將寄存器R0寫下4,表示4號鍵按下了
jmp kend;已經找到按下的鍵,跳到結尾吧
k20:jb p0.1,k30;列2檢查為高電平再檢查列3、4
k21:mov p0,#11101111b;列2有健按下時,P0.0會變低,到底是那一行的鍵按下呢?分別輸出行的低電平
jb p0.1,k22;該行的鍵不按下時p0.0為高電平,跳到到K22,檢查另外三行
mov r1,#12;如果正好是這行的鍵按下,將寄存器R0寫下5,表示5號鍵按下了(以後相同,不再重復了)
k22:mov p0,#11011111b
jb p0.1,k23
mov r1,#9
k23:mov p0,#10111111b
jb p0.1,k24
mov r1,#8
k24:mov p0,#01111111b
jb p0.1,kend
mov r1,#7
jmp kend;已經找到按下的鍵,跳到結尾吧(以後相同,不要重復了)
k30:jb p0.2,k40
k31:mov p0,#11101111b
jb p0.2,k32
mov r1,#11
k32:mov p0,#11011111b
jb p0.2,k33
mov r1,#6
k33:mov p0,#10111111b
jb p0.2,k34
mov r1,#5
k34:mov p0,#01111111b
jb p0.2,kend
mov r1,#4
jmp kend
k40:jb p0.3,kend
k41:mov p0,#11101111b
jb p0.3,k42
mov r1,#10
k42:mov p0,#11011111b
jb p0.3,k43
mov r1,#3
k43:mov p0,#10111111b
jb p0.3,k44
mov r1,#2
k44:mov p0,#01111111b
jb p0.3,kend
mov r1,#1
kend: ret
end
6. 有沒有好的51單片機手機學習網站
OURDEV論壇,很好的地方,去逛逛,開源資料非常多,沒有下載限制,非會員都能下載,不過相信你去了之後會注冊的
http://www.ourdev.cn/bbs/bbs_list.jsp?bbs_id=1006
good luck!
7. 51單片機接入乙太網的幾種方案
1、MAC+PHY方案
所謂的TCP/IP協議棧是一系列網路協議的統稱,不僅包括我們熟知的TCP協議和IP協議。
還有網路層的ICMP(Internet控制報文)協議、IGMP(Internet組管理)協議、ARP(地址解析)協議,傳輸層的UDP(用戶數據包)協議,應用層的HTTP(超文本傳輸)協議、DNS(域名解析)協議、FTP(文件傳送)協議、SMTP(簡單郵件管理)協議等等。
傳統的乙太網接入方案由MCU+MAC+PHY再加入網路介面實現乙太網的物理連接,通過在主控晶元中植入TCP/IP協議代碼實現通信及上層應用。
應用這種軟體TCP/IP協議棧方式實現的比較成熟方案有ENC28J60,CS8900A,DM9000,當然也有像STM32F107這類(內部自帶MAC)+PHY等方案。
2、硬體協議棧晶元方案
由MCU+硬體協議棧晶元(內含MAC和PHY)直接加網路介面,便可方便的實現單片機聯網,所有的處理TCP/IP協議的工作都是通過這位MCU的「小秘書」——硬體協議棧晶元來完成。
乙太網晶元的內核由傳輸層的TCP、UDP、ICMP、IGMP等協議、網路層的IP、ARP、PPPoE等協議以及鏈路層的MAC構成,再加上物理層的PHY和外圍的寄存器、內存、SPI介面組成了這一整套硬體化的乙太網解決方案。
這套硬體TCP/IP協議棧代替了以往的MCU來處理這些中斷請求,即MCU只需要處理面向用戶的應用層數據即可,傳輸層、網路層、鏈路層及物理層全部由外圍WIZnet的晶元完成。
這套方案從硬體開銷和軟體開發兩個方面來簡化前面所述的五層網路模型,簡化產品開發方案。這樣一來,工程師們就不必再面對繁瑣的通信協議代碼,只需要了解簡單的寄存器功能以及Socket編程便能完成產品開發工作的的網路功能開發部分。
(7)51單片機網擴展閱讀
乙太網協議:
一個標準的乙太網物理傳輸幀由七部分組成。
PR SD DA SA TYPE DATA FCS
同步位 分隔位 目的地址 源地址 類型欄位 數據段 幀校驗序列 7 1 6 6 2 46~1500 4
除了數據段的長度不定外,其他部分的長度固定不變。數據段為46~1500位元組。乙太網規定整個傳輸包的最大長度不能超過1514位元組(14位元組為DA、SA、TYPE),最小不能小於60位元組。
除去DA、SA、TYPE14位元組,還必須傳輸46位元組的數據,當數據段的數據不足46位元組時需填充,填充字元的個數不包括在長度欄位里;超過1500位元組時,需拆成多個幀傳送。
事實上,發送數據時,PR、SD、FCS及填充欄位這幾個數據段由乙太網控制器自動產生;而接收數據時,PR、SD被跳過,控制器一旦檢測到有效的前序欄位(即PR、SD),就認為接收數據開始。
8. 我想學習51單片機該去什麼網站
學習單片機光看書是不行的,要與實物相結合,可以到淘寶上買一塊開發版,也就幾十到一百,配套的光碟裡面都有視頻講解的。遇到不懂的問題可以在一些單片機Q群裡面詢問,也可以在論壇上查找問題。這類的論壇一抓一大把
9. 51單片機的官網是什麼
雖然給不了你答案,還是要回答的。你所謂的51是哪個品牌的呢?如果省略的話應該指的是ATMEL,那麼它的官網是http://www.atmel.com/。如果是其他的比如國產STC,你就網路一下品牌官網。
10. 如何學習51單片機上網技術
總體說來,TCPIP並不是一件十分神秘的事情,尤其是基於MCU的應用,不要求進行特別復雜的處理,很多情況下只需要實現最最基本的功能就行了。在實現MCU的TCPIP移植之前,必須對TCPIP有一定程度的了解,可以找一本合適的書籍來翻閱一下,《TCP/IP詳解,卷1:協議》 http://www.laogu.com/display.aspx?did=510是一本完整而詳細的TCP/IP協議指南。描述了屬於每一層的各個協議以及它們如何在不同操作系統中運行。 對於TCPIP在MCU上的應用並不要求對協議的所有部分都了解的那麼清楚,重點需要了解TCPIP的各個層次的關系,鏈路層,有時也稱作數據鏈路層或網路介面層,通常包括操作系統中的設備驅動程序和計算機中對應的網路介面卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理介面細節。網路層,有時也稱作互聯網層,處理分組在網路中的活動,例如分組的選路。在T C P / I P協議族中,網路層協議包括I P協議(網際協議),I C M P協議(I n t e r n e t互聯網控制報文協議),以及I G M P協議(I n t e r n e t組管理協議)。 運輸層主要為兩台主機上的應用程序提供端到端的通信。在T C P / I P協議族中,有兩個互不相同的傳輸協議: T C P(傳輸控制協議)和U D P(用戶數據報協議)。T C P為兩台主機提供高可靠性的數據通信。它所做的工作包括把應用程序交給它的數據分成合適的小塊交給下面的網路層,確認接收到的分組,設置發送最後確認分組的超時時鍾等。由於運輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有這些細節。而另一方面, U D P則為應用層提供一種非常簡單的服務。它只是把稱作數據報的分組從一台主機發送到另一台主機,但並不保證該數據報能到達另一端。任何必需的可靠性必須由應用層來提供。這兩種運輸層協議分別在不同的應用程序中有不同的用途。應用層負責處理特定的應用程序細節。幾乎各種不同的T C P / I P實現都會提供Telnet,FTP,SMTP 簡單郵件傳送協議,SNMP簡單網路管理協議這些通用的應用程序。 各種類型的數據報格式也是需要了解的重點,使用Sniffer軟體可以十分方便的在電腦上查看各種數據報的收發狀態.同時Sniffer也是以後調試TCPIP協議寨的一個很有用的工具,Sniffer的使用方式可以在www.google.com上很方便的搜索到. TCP/IP的分層,乙太網封裝,IP首部,子網定址和子網掩碼,ARP地址解析協議,ICMP控制報文協議中的ECHO(Ping程序),UDP用戶數據報協議,TFTP簡單文件傳送協議,特別是TCP傳輸控制協議是TCPIP在MCU上應用所必需掌握的關鍵知識. 在對TCPIP有了一定程度的了解之後,如何具體的實現就成了問題的關鍵,我在學習TCPIP的過程中前後一共使用或閱讀了下面的3中TCPIP協議寨,這里有對3個協議寨的比較和下載地址. uIP,適合8bit單片機上使用,但是結構比較復雜,不適宜進行移植,也不是一份很適合閱讀的代碼.下載地址 http://www.sics.se/~adam/uip/ Lwip,適合16/32bit單片機上使用,是嵌入式系統開發人員最好的學習TCPIP的代碼,下載地址 http://www.sics.se/~adam/lwip/ zLip,南開大學電子應用實驗室編寫的一個協議寨,有uip和lwip的優點,推薦初學者學習 http://www.zlmcu.com/project/ZLIP/zlip.htm或 http://www.laogu.com/display.aspx?did=859 在了解了具體實現之後,就有需要在MCU上具體的運行一下了,這里提供一個我做的硬體電路,但是其中我使用了GAL16V8晶元進行地址分配,所以需要有一個支持16V8的燒寫器了,同時,如果將at89c55晶元換成sst89c58,並從www.sst.com公司網站上下載一個monitor 51的模擬監控程序,使用燒寫器寫入sst89c58中,就可以通過串口和Keil軟體配合進行硬體模擬了.(市場上的那些100多元的51模擬器就是這個樣子的)