標(biāo)題: 用STC單片機(jī)制作萬能的或非門邏輯處理器-可處理所有的門電路組合復(fù)雜運(yùn)算-全球首發(fā)! [打印本頁]

作者: npn    時(shí)間: 2016-10-6 09:08
標(biāo)題: 用STC單片機(jī)制作萬能的或非門邏輯處理器-可處理所有的門電路組合復(fù)雜運(yùn)算-全球首發(fā)!
用STC單片機(jī)制作萬能的或非門邏輯處理器-可處理所有的門電路組合復(fù)雜運(yùn)算-全球首發(fā)!
可將世界上所有的數(shù)字電路轉(zhuǎn)換成或非門電路線路連接組合使用該模擬器完成。
是目前世界上制作原理最簡單的,功能最強(qiáng)大的CPU處理器。
只要世界上任意一種編程語言支持?jǐn)?shù)組、循環(huán)、判斷、計(jì)算功能即可100%成功移植。
世界上所有的數(shù)字電路都是由大量的邏輯門 包括與門、或門、非門3種基本邏輯門組成。
世界上所有的復(fù)雜運(yùn)算功能都是通過大量的邏輯門組合運(yùn)算自動(dòng)完成。
可修改為更高位的地址寬度,但需要容量更大容量的存儲(chǔ)器。
使用純與非門、或非門電路即可組成與門、或門、非門。
所有CPU內(nèi)部邏輯門組合數(shù)據(jù)轉(zhuǎn)換成或非門組合數(shù)據(jù)即可移植到該模擬器里。
使用或非門組成的數(shù)字電路對(duì)每一根接線進(jìn)行編號(hào)并且寫入ROM即可完成編程功能。
8051指令集單片機(jī)型號(hào)任意直接編譯即可,其余指令集可能需要修改頭文件以及程序源碼或者根據(jù)該CPU指令執(zhí)行過進(jìn)行移植與編寫,
支持世界上任何平臺(tái)指令集的CPU模擬,只要容量足夠就可以準(zhǔn)確無誤的模擬。

與門:全1出1,有0出0  燈座上有個(gè)開關(guān),插線板上有另一個(gè)開關(guān),兩個(gè)開關(guān)必須打開燈泡即可點(diǎn)亮,否則無法點(diǎn)亮。
或門:有1出1,全0出0  兩個(gè)并聯(lián)的開關(guān)打開其中一個(gè)后燈泡就能點(diǎn)亮,兩個(gè)開關(guān)全部關(guān)閉后則無法點(diǎn)亮。
非門:進(jìn)1出0 進(jìn)0出1   燈泡并聯(lián)開關(guān),開關(guān)打開后由于電源短路的電阻小于燈泡電阻,燈泡熄滅,否則就能點(diǎn)亮。
使用以上三種基本邏輯門組合即可實(shí)現(xiàn)世界上各種復(fù)雜的運(yùn)算。
異或門:相異出1,相同出0,全0出0,全1出0,否則出1。
同或門:異或門輸出串聯(lián)非門,相同出1,相異出0,全0出1,全1出1,否則出0。
與非門:與門輸出串聯(lián)非門,全1出0 有0出1。
或非門:或門輸出串聯(lián)非門,有1出0 全0出1。
世界上所有的數(shù)據(jù)的計(jì)算、存儲(chǔ)、傳輸、等在數(shù)納秒的時(shí)間內(nèi)自動(dòng)完成的事件都是由無數(shù)個(gè)基本邏輯門組合而實(shí)現(xiàn)。
邏輯電路分為兩大類:分別是組合邏輯電路和時(shí)序邏輯電路。
組合邏輯電路不包含記憶存儲(chǔ)功能,具有固定的真值表。
例如:全加器、全減器、乘法器、除法器、譯碼器、數(shù)據(jù)選擇器、數(shù)據(jù)分配器、數(shù)字大小比較器、BCD代碼轉(zhuǎn)換器等。
時(shí)序邏輯電路是一種具有記憶儲(chǔ)存功能的邏輯電路。
例如:計(jì)數(shù)器、鎖存器、觸發(fā)器、寄存器、存儲(chǔ)器等。
P0~P7口直接與RAM地址0~7(字節(jié))連接。
ROM共768字節(jié),RAM共256位(32字節(jié))。
每條指令共3字節(jié)(共256條指令)。
指令格式:輸入地址1 輸出地址 輸入地址2。
指令執(zhí)行過程:
從輸入地址1和輸入地址2,送入RAM的地址線,根據(jù)地址找到RAM位數(shù)據(jù)。
經(jīng)過或非比較后將結(jié)果寫入輸出地址,結(jié)果1位位值經(jīng)過該地址寫回并覆蓋RAM。
  觸發(fā)程序計(jì)數(shù)器加3,繼續(xù)根據(jù)以上方法執(zhí)行下面的指令。
  程序計(jì)數(shù)器大于等于768或遇到0xFF指令則清零,從頭執(zhí)行指令。
  可改成16位或更高位寬度以支持更大規(guī);蚍情T運(yùn)算。
   1條指令的字節(jié)數(shù)=位數(shù)/8*3
   需要的RAM字節(jié)數(shù)=2^位數(shù)/8
   需要的ROM字節(jié)數(shù)=1條指令的字節(jié)數(shù)*2^位數(shù)
   8位需要32B的RAM和786B的ROM。
   16位需要8KB的RAM和384KB的ROM。
   24位需要2MB的RAM和144MB的ROM。
   32位需要512MB的RAM和48GB的ROM。
   48位需要32TB的RAM和4.5PB的ROM。
   以此類推。
  以32位為例,每秒循環(huán)執(zhí)行1次所有指令則為1Hz的指令循環(huán)周期。
  每秒執(zhí)行1條指令的時(shí)間為指令周期,指令周期約為4.3Ghz,循環(huán)執(zhí)行所有指令的周期為1Hz。
  若循環(huán)周期需要達(dá)到1Mhz,指令周期判斷器,RAM和ROM的響應(yīng)頻率必須達(dá)到4.3Phz左右即可。
  ROM門電路原理:
  非門: 0x00 0x01 0x00 0xFF 0xFF 0xFF
  0x00與0x00的值進(jìn)行了或非比較,結(jié)果寫入0x01 或非門的兩個(gè)輸入端接在一起就是非門 地址0x01的輸出與0x00相反。
  非門高頻振蕩器:0x00 0x00 0x00 0xFF 0xFF 0xFF
  0x00與0x00的值進(jìn)行了或非比較,結(jié)果放入0x00中,由于原有值與寫入的值相反,即可形成高頻振蕩信號(hào),具體輸出頻率與
指令執(zhí)行時(shí)間有關(guān)。
  以下所有2進(jìn)1出門電路全是0x00 和0x01是輸入端,0x02是輸出端 。

  或非門:0x00 0x02 0x01 0xFF 0xFF 0xFF
  0x00 與0x01的值進(jìn)行或非比較,結(jié)果寫入0x02
  與門:0x00 0x03 0x00 0x01 0x04 0x01 0x03 0x02 0x04 0xFF 0xFF 0xFF
  0x00 的 反向值寫入0x03,0x01的反向值寫入0x04,0x03與0x04經(jīng)過或非比較,結(jié)果寫入0x02地址。
  與門是或非門輸入兩端各自串聯(lián)兩個(gè)非門,用兩個(gè)或非門兩端接在一起代替非門。
  或門:0x00 0x03 0x01 0x03 0x02 0x03 0xFF 0xFF 0xFF
   0x00 與0x01 的值進(jìn)行了或非比較,結(jié)果寫入0x03,再與0x03和0x03的值進(jìn)行比較,結(jié)果寫入0x02地址。
   或門是或非門輸出端串聯(lián)一個(gè)非門而組成。
  與非門:0x00 0x03 0x00 0x01 0x04 0x01 0x03 0x05 0x04 0x05 0x02 0x05 0xFF 0xFF 0xFF
  與非門是與門輸出串聯(lián)非門組成。
  異或門:0x00 0x03 0x00 0x01 0x04 0x01 0x03 0x05 0x04
          0x05 0x06 0x05 0x06 0x07 0x06 0x00 0x08 0x01
          0x08 0x09 0x08 0x09 0x0A 0x09 0x07 0x02 0x0A
                        0xFF 0xFF 0xFF

  異或門是與非門和或門并聯(lián),兩個(gè)輸出端再接入與門而組成。
  同或門:0x00 0x03 0x00 0x01 0x04 0x01 0x03 0x05 0x04
          0x05 0x06 0x05 0x06 0x07 0x06 0x00 0x08 0x01
          0x08 0x09 0x08 0x09 0x0A 0x09 0x07 0x0B 0x0A
                        0x0B 0x02 0x0B 0xFF 0xFF 0xFF
  同或門是異或門輸出端串聯(lián)一個(gè)非門而組成。
  以上0xFF是清零PC指針的指令,一但有指令訪問該地址進(jìn)行讀寫操作,該地址的數(shù)據(jù)不但不能被寫入,而且PC指針就會(huì)清零
重頭執(zhí)行,不會(huì)清除RAM數(shù)據(jù)。
  程序加密執(zhí)行方法:
   
   內(nèi)部運(yùn)算數(shù)據(jù)可以寫在任何地址,將讀寫數(shù)據(jù)的地址全部隨機(jī)交換打亂即可,不包含主要輸入輸出地址以及0xFF,
不影響正常的執(zhí)行。

     比如將0x12地址變成0x34,0x34地址變成0x12,0x12與0x34進(jìn)行交換,以此類推。
     ROM中的原有的0x12變成了0x34,0x34變成了0x12,不能直接替換否則所有0x34會(huì)變成0x12而導(dǎo)致
程序無法執(zhí)行。
  手工執(zhí)行指令方法:
畫1張16x16的表格并且打印,并且行列標(biāo)上0~F,里面用鉛筆寫滿0,表示RAM。
畫1張ROM圖紙并且標(biāo)注通過PC指針找到指令的方法。
指令執(zhí)行方法:
比如取到1條指令:0xAB 0xCD 0xEF
在RAM中指定0xAB坐標(biāo)找到數(shù)字0
在RAM中指定0xEF坐標(biāo)找到數(shù)字0
通過或非門全0出1,有1出0的判斷后。
將數(shù)字1放回RAM的0xCD的坐標(biāo)地址中,如果值不同則使用橡皮擦除該值并且重新寫入新值。
所有指令循環(huán)執(zhí)行多遍后,這張表示RAM的紙會(huì)被橡皮擦除無數(shù)次。
在特定地址的值是輸入或輸出值,改變這些值,指令執(zhí)行完畢后,輸出的值也會(huì)改變。
其余地址的值不能隨意改變避免計(jì)算出錯(cuò)。
遇到指令中包含0xFF則從頭執(zhí)行指令,不清除RAM數(shù)據(jù)即可。

若軟硬件存在bug以及意見建議請(qǐng)?jiān)跇窍禄貜?fù)謝謝合作!
根據(jù)以上門電路組合設(shè)計(jì)實(shí)現(xiàn)的8位全加器:
這些地址由ROM數(shù)據(jù)決定,修改地址入口需要修改ROM。
8位全加器 輸入地址入口:
其余地址的值不可修改,否則計(jì)算可能會(huì)出錯(cuò)。
執(zhí)行前先修改以下地址的值:
0x00~0x07 被加數(shù)
0x08~0x0F 加數(shù)
0x19 進(jìn)位輸入
所有指令執(zhí)行完畢后從以下地址讀取計(jì)算結(jié)果:
0x10~0x17 和
0x18 進(jìn)位輸出

    程序源碼:

  1. #include "reg51.h" //定義頭文件reg51.h
  2. #include "intrins.h" //定義頭文件intrins.h
  3. sfr P4=0xC0; //定義P4口寄存器
  4. sfr P5=0xC8; //定義P5口寄存器
  5. sfr P6=0xE8; //定義P6口寄存器
  6. sfr P7=0xF8; //定義P7口寄存器

  7. unsigned char code rom[768] = { //ROM數(shù)據(jù) 8位全加器 帶進(jìn)位輸入輸出 只讀數(shù)組 固定768字節(jié)
  8. 0x00, 0x31, 0x00, 0x08, 0x33, 0x08, 0x00, 0x34, 0x08, 0x31, 0x35, 0x33, 0x35, 0x36, 0x34, 0x08,
  9. 0x37, 0x08, 0x00, 0x38, 0x00, 0x37, 0x39, 0x38, 0x19, 0x3B, 0x19, 0x36, 0x3C, 0x36, 0x19, 0x3D,
  10. 0x36, 0x3B, 0x3E, 0x3C, 0x3E, 0x10, 0x3D, 0x36, 0x40, 0x36, 0x19, 0x41, 0x19, 0x40, 0x42, 0x41,
  11. 0x39, 0x43, 0x42, 0x43, 0x44, 0x43, 0x01, 0x60, 0x01, 0x09, 0x62, 0x09, 0x01, 0x63, 0x09, 0x60,
  12. 0x64, 0x62, 0x64, 0x65, 0x63, 0x09, 0x66, 0x09, 0x01, 0x67, 0x01, 0x66, 0x68, 0x67, 0x44, 0x69,
  13. 0x44, 0x65, 0x6A, 0x65, 0x44, 0x6B, 0x65, 0x69, 0x6C, 0x6A, 0x6C, 0x11, 0x6B, 0x65, 0x6E, 0x65,
  14. 0x44, 0x6F, 0x44, 0x6E, 0x70, 0x6F, 0x68, 0x71, 0x70, 0x71, 0x72, 0x71, 0x02, 0x74, 0x02, 0x0A,
  15. 0x76, 0x0A, 0x02, 0x77, 0x0A, 0x74, 0x78, 0x76, 0x78, 0x79, 0x77, 0x0A, 0x7A, 0x0A, 0x02, 0x7B,
  16. 0x02, 0x7A, 0x7C, 0x7B, 0x72, 0x7D, 0x72, 0x79, 0x7E, 0x79, 0x72, 0x7F, 0x79, 0x7D, 0x80, 0x7E,
  17. 0x80, 0x12, 0x7F, 0x79, 0x82, 0x79, 0x72, 0x83, 0x72, 0x82, 0x84, 0x83, 0x7C, 0x85, 0x84, 0x85,
  18. 0x86, 0x85, 0x03, 0x88, 0x03, 0x0B, 0x8A, 0x0B, 0x03, 0x8B, 0x0B, 0x88, 0x8C, 0x8A, 0x8C, 0x8D,
  19. 0x8B, 0x0B, 0x8E, 0x0B, 0x03, 0x8F, 0x03, 0x8E, 0x90, 0x8F, 0x86, 0x91, 0x86, 0x8D, 0x92, 0x8D,
  20. 0x86, 0x93, 0x8D, 0x91, 0x94, 0x92, 0x94, 0x13, 0x93, 0x8D, 0x96, 0x8D, 0x86, 0x97, 0x86, 0x96,
  21. 0x98, 0x97, 0x90, 0x99, 0x98, 0x99, 0x9A, 0x99, 0x04, 0x9C, 0x04, 0x0C, 0x9E, 0x0C, 0x04, 0x9F,
  22. 0x0C, 0x9C, 0xA0, 0x9E, 0xA0, 0xA1, 0x9F, 0x0C, 0xA2, 0x0C, 0x04, 0xA3, 0x04, 0xA2, 0xA4, 0xA3,
  23. 0x9A, 0xA5, 0x9A, 0xA1, 0xA6, 0xA1, 0x9A, 0xA7, 0xA1, 0xA5, 0xA8, 0xA6, 0xA8, 0x14, 0xA7, 0xA1,
  24. 0xAA, 0xA1, 0x9A, 0xAB, 0x9A, 0xAA, 0xAC, 0xAB, 0xA4, 0xAD, 0xAC, 0xAD, 0xAE, 0xAD, 0x05, 0xB0,
  25. 0x05, 0x0D, 0xB2, 0x0D, 0x05, 0xB3, 0x0D, 0xB0, 0xB4, 0xB2, 0xB4, 0xB5, 0xB3, 0x0D, 0xB6, 0x0D,
  26. 0x05, 0xB7, 0x05, 0xB6, 0xB8, 0xB7, 0xAE, 0xB9, 0xAE, 0xB5, 0xBA, 0xB5, 0xAE, 0xBB, 0xB5, 0xB9,
  27. 0xBC, 0xBA, 0xBC, 0x15, 0xBB, 0xB5, 0xBE, 0xB5, 0xAE, 0xBF, 0xAE, 0xBE, 0xC0, 0xBF, 0xB8, 0xC1,
  28. 0xC0, 0xC1, 0xC2, 0xC1, 0x06, 0xC4, 0x06, 0x0E, 0xC6, 0x0E, 0x06, 0xC7, 0x0E, 0xC4, 0xC8, 0xC6,
  29. 0xC8, 0xC9, 0xC7, 0x0E, 0xCA, 0x0E, 0x06, 0xCB, 0x06, 0xCA, 0xCC, 0xCB, 0xC2, 0xCD, 0xC2, 0xC9,
  30. 0xCE, 0xC9, 0xC2, 0xCF, 0xC9, 0xCD, 0xD0, 0xCE, 0xD0, 0x16, 0xCF, 0xC9, 0xD2, 0xC9, 0xC2, 0xD3,
  31. 0xC2, 0xD2, 0xD4, 0xD3, 0xCC, 0xD5, 0xD4, 0xD5, 0xD6, 0xD5, 0x07, 0xD8, 0x07, 0x0F, 0xDA, 0x0F,
  32. 0x07, 0xDB, 0x0F, 0xD8, 0xDC, 0xDA, 0xDC, 0xDD, 0xDB, 0x0F, 0xDE, 0x0F, 0x07, 0xDF, 0x07, 0xDE,
  33. 0xE0, 0xDF, 0xD6, 0xE1, 0xD6, 0xDD, 0xE2, 0xDD, 0xD6, 0xE3, 0xDD, 0xE1, 0xE4, 0xE2, 0xE4, 0x17,
  34. 0xE3, 0xDD, 0xE6, 0xDD, 0xD6, 0xE7, 0xD6, 0xE6, 0xE8, 0xE7, 0xE0, 0xE9, 0xE8, 0xE9, 0x18, 0xE9,
  35. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  36. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  37. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  38. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  39. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  40. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  41. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  42. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  43. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  44. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  45. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  46. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  47. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  48. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  49. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  50. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  51. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  52. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  53. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  54. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
  55. 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
  56. };
  57. unsigned char ram[32];  //32字節(jié)RAM 共256位
  58. unsigned int pc=0; //程序指針 取值范圍:0~768
  59. //由于C51不能直接定義位數(shù)組,所以這里只能通過移位處理實(shí)現(xiàn)位數(shù)組。
  60. bit read_ram(unsigned char a){ //RAM讀數(shù)據(jù)
  61. unsigned char b=a>>3;  //獲取該位對(duì)應(yīng)的字節(jié)
  62. unsigned char c=a&7;   //獲取該字節(jié)對(duì)應(yīng)的位
  63. return (1<<c&ram[b])>>c; //返回位數(shù)據(jù)

  64. }

  65. void write_ram(unsigned char a,bit d){  //RAM寫數(shù)據(jù)
  66. unsigned char b=a>>3;   //獲取該位對(duì)應(yīng)的字節(jié)
  67. unsigned char c=a&7;    //獲取該字節(jié)對(duì)應(yīng)的位
  68. bit e=(1<<c&ram[b])>>c; //獲取該位數(shù)據(jù)
  69. if(d == 0){ //要寫的位為0
  70.   if(e==1){ //位讀取到1
  71.   ram[b]-=1<<c; //該位數(shù)據(jù)置0
  72.   }
  73. } else { //要寫的位為1
  74.   if(e==0){ //位讀取到0
  75.   ram[b]+=1<<c; //該位數(shù)據(jù)置1
  76.   }
  77. }



  78. }
  79. void cpu_reset(){ //cpu復(fù)位
  80. P0=0;P1=0;P2=0;P3=0; //P0~P3口全置低電平
  81. P4=0;P5=0;P6=0;P7=0; //P4~P7口全置低電平
  82. for(pc=0;pc<32;pc++){ //循環(huán)32次清零所有RAM
  83.   ram[pc]=0; //RAM字節(jié)清零
  84. }
  85. pc=0; //pc指針清零
  86. }
  87. void main(){ //主函數(shù)
  88. cpu_reset(); //cpu復(fù)位
  89. while(1){ //死循環(huán)
  90. //將IO口數(shù)據(jù)寫入RAM
  91. ram[0]=P0;ram[1]=P1;ram[2]=P2;ram[3]=P3; //將P0~P3口數(shù)據(jù)送入RAM地址0~3
  92. ram[4]=P4;ram[5]=P5;ram[6]=P6;ram[7]=P7; //將P4~P7口數(shù)據(jù)送人RAM地址4~7
  93.   if(rom[pc] == 0xFF || rom[pc+1] == 0xFF || rom[pc+2] == 0xFF){ //指令中遇到0xFF則清零pc指針
  94.   pc=0;
  95.   }
  96.   if(read_ram(rom[pc]) == 0 && read_ram(rom[pc+2]) == 0){ //全0出1
  97.    write_ram(rom[pc+1],1); //將數(shù)值1寫入RAM
  98.    } else { //有1出0
  99.    write_ram(rom[pc+1],0); //將數(shù)值0寫入RAM
  100.    }

  101. pc+=3; //pc指針加3

  102. if(pc%3 != 0){ //pc指針取余3不等于0
  103. cpu_reset();//cpu復(fù)位,避免出現(xiàn)錯(cuò)誤
  104. }
  105. if(pc >= 768){ //pc指針大于等于768
  106. pc=0; //pc指針清零
  107. }

  108. //將RAM數(shù)據(jù)寫入IO口
  109. P0=ram[0];P1=ram[1];P2=ram[2];P3=ram[3]; //將RAM數(shù)據(jù)0~3送入IO口P0~P3
  110. P4=ram[4];P5=ram[5];P6=ram[6];P7=ram[7]; //將RAM數(shù)據(jù)4~7送入IO口P4~P7
  111. }
  112. }
復(fù)制代碼

作者: heicad    時(shí)間: 2016-10-7 14:50
花了點(diǎn)時(shí)間看了一下,樓主講的真詳細(xì),不知道這個(gè)或非門邏輯處理器有什么具體的作用嗎?還有外接電路是怎么樣的?
作者: npn    時(shí)間: 2016-10-7 17:02
heicad 發(fā)表于 2016-10-7 14:50
花了點(diǎn)時(shí)間看了一下,樓主講的真詳細(xì),不知道這個(gè)或非門邏輯處理器有什么具體的作用嗎?還有外接電路是怎么 ...

另外這種處理器是沒有指令集的,通過ram地址提前位數(shù)據(jù)然后經(jīng)過或非計(jì)算,最后寫回ram,即可實(shí)現(xiàn)非常復(fù)雜的運(yùn)算,也可以只用與非門實(shí)現(xiàn),甚至可以用任意編程語言模擬這種處理器,只用異或門或同或門好像實(shí)現(xiàn)不了3種基本門。


作者: 丿丶丶    時(shí)間: 2016-10-7 17:38
謝謝分享。!
作者: xsjysm888    時(shí)間: 2016-10-8 07:44
學(xué)習(xí)一下
作者: wpppmlah    時(shí)間: 2016-10-8 16:06
高手如云,受教了!
作者: xmd1972    時(shí)間: 2016-10-8 20:54
很新奇的構(gòu)想,實(shí)際應(yīng)用如何呢?
作者: ywzlq    時(shí)間: 2016-10-8 22:30
學(xué)習(xí)了,謝謝分享!
作者: 維超    時(shí)間: 2016-10-9 15:12
總結(jié)得很到位.
作者: zlgmo    時(shí)間: 2016-10-10 14:16
謝謝分享!。
作者: shali    時(shí)間: 2016-10-12 09:33
搞得不錯(cuò),下載來看看

作者: ji1490167569    時(shí)間: 2016-10-25 21:55
好厲害
作者: hnnxlm    時(shí)間: 2016-10-27 22:33
看看大神作品
作者: npn    時(shí)間: 2016-12-7 21:11
xmd1972 發(fā)表于 2016-10-8 20:54
很新奇的構(gòu)想,實(shí)際應(yīng)用如何呢?

實(shí)際應(yīng)用功能非常強(qiáng)大,無論是世界上的任何數(shù)字電路這都能實(shí)現(xiàn)。

作者: goldpds    時(shí)間: 2017-1-14 21:34
還真花了不少心思
作者: trm999    時(shí)間: 2017-8-11 01:27
有沒搞錯(cuò)這還要隱藏啊!!!!

作者: 氺魔尊丿    時(shí)間: 2017-8-11 02:53
很強(qiáng)

作者: 氺魔尊丿    時(shí)間: 2017-8-11 02:54
很一起努力
作者: yxsyzhj    時(shí)間: 2017-8-11 12:02
謝謝分享!
作者: LXJ50    時(shí)間: 2017-8-11 15:09
挺新奇的,好奇!看看。
作者: duranhuang    時(shí)間: 2017-8-12 21:33
說的很強(qiáng)大,新手看看能吃多少。
作者: shz229    時(shí)間: 2017-8-13 12:22
謝謝分享
作者: hozhiwen    時(shí)間: 2017-8-13 21:44
謝謝分享。看看來學(xué)習(xí)下。
作者: XT81247262    時(shí)間: 2017-8-24 19:51
謝謝分享!。
作者: 乖妹妹    時(shí)間: 2017-12-19 15:45
很全面
作者: pilote    時(shí)間: 2017-12-29 17:03
關(guān)鍵是處理速度吧
作者: yyyttt_2007    時(shí)間: 2017-12-29 19:19
學(xué)習(xí)下,很不錯(cuò)
作者: yyyttt_2007    時(shí)間: 2017-12-29 19:20
總結(jié)恨到位,先試驗(yàn)下
作者: wugangjjjj    時(shí)間: 2018-2-18 03:20
當(dāng)作門電路很新奇
作者: 黑黑—坤    時(shí)間: 2018-2-20 10:51
感謝分享!
作者: cpfmly    時(shí)間: 2018-2-27 19:43
看看源碼是什么
作者: zkg009    時(shí)間: 2018-2-27 22:12
奇特,看看
作者: QIANLILI    時(shí)間: 2018-2-27 23:05
謝謝分享      
作者: nt_ljj    時(shí)間: 2018-2-28 13:02
值得好好學(xué)習(xí)
作者: qjzyx    時(shí)間: 2018-2-28 13:41
通俗易懂,收藏個(gè)學(xué)習(xí),謝謝。
作者: qjzyx    時(shí)間: 2018-2-28 13:48
通俗易懂,收藏個(gè)學(xué)習(xí),謝謝分享,
作者: 372438dfs    時(shí)間: 2018-2-28 20:14
很想學(xué)習(xí)
作者: 1371429932    時(shí)間: 2018-6-20 15:04
特別想學(xué)習(xí)一下,謝謝分享。
作者: gdstlhy    時(shí)間: 2018-6-21 08:13
挺新奇的,好奇!看看。
作者: bayga456    時(shí)間: 2018-6-22 19:25
沒看明白。
作者: cement777    時(shí)間: 2018-6-22 21:54
感謝樓主無私分享
作者: W下一站幸福W    時(shí)間: 2018-6-25 19:37
支持一下
作者: 桃源客    時(shí)間: 2018-6-26 00:13
一般都不會(huì)用這個(gè)來模擬了吧.
作者: lewisreed    時(shí)間: 2018-7-9 12:22
看一下能用不
作者: lewisreed    時(shí)間: 2018-7-9 12:25
Mark一下!暫時(shí)沒看懂
作者: bhjyqjs    時(shí)間: 2018-7-20 14:30
哈哈,這么復(fù)雜?
作者: 金溪小書童    時(shí)間: 2018-7-20 18:00
這個(gè)得看看,
作者: qq793943839    時(shí)間: 2018-7-20 18:10
辛苦樓主了 這東西很好
作者: holtek    時(shí)間: 2018-7-20 19:50
不錯(cuò),學(xué)習(xí)了,謝謝。。。。
作者: ask86668    時(shí)間: 2018-7-20 21:44
非常好啊
作者: k2866    時(shí)間: 2018-7-21 00:07
謝謝分享。!
作者: 指北針    時(shí)間: 2018-7-21 07:40
這種模擬的門電路會(huì)不會(huì)時(shí)延比較大。
作者: 牛仔不是唐    時(shí)間: 2018-7-21 09:12
了解一下
作者: gl159a    時(shí)間: 2018-7-22 10:31
謝謝樓主

作者: guangshi_wq    時(shí)間: 2018-7-22 15:27
確實(shí)是不錯(cuò),你讓單片機(jī)處理不該它處理的事情,我覺得,你應(yīng)該用GAL器件,一樣可以得到你所需要要結(jié)果,而且速度比單片機(jī)快N多倍.因邏輯運(yùn)算時(shí)大多需要高速,實(shí)時(shí).
作者: fsj5098    時(shí)間: 2018-7-22 17:14
樓主講的真詳細(xì),不知道這個(gè)或非門邏輯處理器有什么具體的作用嗎?還有外接電路是怎么樣的?
作者: 大眼瞪小眼    時(shí)間: 2018-7-22 19:02
不錯(cuò),謝謝分享
作者: SKU    時(shí)間: 2018-7-22 20:57
沒看明白
作者: 1607928674    時(shí)間: 2018-7-22 22:23
學(xué)習(xí)一下
作者: xinrong86    時(shí)間: 2018-7-23 01:02

高手如云
作者: 854100995    時(shí)間: 2018-7-25 08:31
學(xué)習(xí)了~
作者: dragon20100708    時(shí)間: 2018-7-25 17:07
謝謝分享。!
作者: 子非魚001    時(shí)間: 2019-11-18 12:17
樓主好人
作者: zero0    時(shí)間: 2019-11-20 20:45
void cpu_reset(){ //cpu復(fù)位
P0=0;P1=0;P2=0;P3=0; //P0~P3口全置低電平
P4=0;P5=0;P6=0;P7=0; //P4~P7口全置低電平
for(pc=0;pc<32;pc++){ //循環(huán)32次清零所有RAM
  ram[pc]=0; //RAM字節(jié)清零
}
cpu_reset復(fù)位之后,P0=0,P1=0,P2=0,P3=0,被強(qiáng)下拉了,后面P0,P1,P2,P3不就總是為低電平?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1