㈠ msp430緙栫▼
MSP430緋誨垪鍗曠墖鏈虹畝浠
鍘熶綔鑰咃細 寮犱繆璋
1銆丮SP430 鍗曠墖鏈虹殑鍙戝睍
MSP430 緋誨垪鏄涓涓 16 浣嶇殑銆佸叿鏈夌簿綆鎸囦護闆嗙殑銆佽秴浣庡姛鑰楃殑娣峰悎鍨嬪崟鐗囨満錛屽湪 1996 騫撮棶涓栵紝鐢變簬瀹冨叿鏈夋瀬浣庣殑鍔熻椼佷赴瀵岀殑鐗囧唴澶栬懼拰鏂逛究鐏墊椿鐨勫紑鍙戞墜孌碉紝宸叉垚涓轟紬澶氬崟鐗囨満緋誨垪涓涓棰楄鐪肩殑鏂版槦銆傚洖蹇 MSP430 緋誨垪鍗曠墖鏈虹殑鍙戝睍榪囩▼錛屽彲浠ョ湅鍑烘湁榪欐牱涓変釜闃舵碉細
寮濮嬮樁孌 浠 1996 騫存帹鍑 MSP430 緋誨垪寮濮嬪埌 2000 騫村垵錛岃繖涓闃舵甸栧厛鎺ㄥ嚭鏈 33X 銆 32X 銆 31X 絳夊嚑涓緋誨垪錛岃屽悗浜 2000 騫村垵鍙堟帹鍑轟簡 11X 銆 11X1 緋誨垪銆
MSP430 鐨 33X 銆 32X 銆 31X 絳夌郴鍒楀叿鏈 LCD 椹卞姩妯″潡錛屽規彁楂樼郴緇熺殑闆嗘垚搴﹁緝鏈夊埄銆傛瘡涓緋誨垪鏈 ROM 鍨嬶紙 C 錛夈 OTP 鍨嬶紙 P 錛夈佸拰 EPROM 鍨嬶紙 E 錛夌瓑鑺鐗囥 EPROM 鍨嬬殑浠鋒牸鏄傝吹錛岃繍琛岀幆澧冩俯搴﹁寖鍥寸獎錛屼富瑕佺敤浜庢牱鏈哄紑鍙戙傝繖涔熻〃鏄庝簡榪欏嚑涓緋誨垪鐨勫紑鍙戞ā寮忥紝鍗籌細鐢ㄦ埛鍙浠ョ敤 EPROM 鍨嬪紑鍙戞牱鏈猴紱鐢 OTP 鍨嬭繘琛屽皬鎵歸噺鐢熶駭錛涜 ROM 鍨嬮傚簲澶ф壒閲忕敓浜х殑浜у搧銆
2000 騫存帹鍑轟簡 11X/11X1 緋誨垪銆傝繖涓緋誨垪閲囩敤 20 鑴氬皝瑁咃紝鍐呭瓨瀹歸噺銆佺墖涓婂姛鑳藉拰 I/O 寮曡剼鏁版瘮杈冨皯錛屼絾鏄浠鋒牸姣旇緝浣庡粔銆
榪欎釜鏃舵湡鐨 MSP430 宸茬粡鏄鵑湶鍑轟簡瀹冪殑鐗逛綆鍔熻楃瓑鐨勪竴緋誨垪鎶鏈鐗圭偣錛屼絾涔熸湁涓嶅敖濡備漢鎰忎箣澶勩傚畠鐨勮稿氶噸瑕佺壒鎬э紝濡傦細鐗囧唴涓茶岄氫俊鎺ュ彛銆佺‖浠朵箻娉曞櫒銆佽凍澶熺殑 I/O 寮曡剼絳夛紝鍙鏈 33X 緋誨垪鎵嶅叿澶囥 33X 緋誨垪浠鋒牸杈冮珮錛屾瘮杈冮傚悎浜庤緝涓哄嶆潅鐨勫簲鐢ㄧ郴緇熴傚綋鐢ㄦ埛璁捐¢渶瑕佹洿澶氳冭檻鎴愭湰鏃訛紝 33X 騫朵笉涓瀹氭槸鏈閫傚悎鐨勩傝岀墖鍐呴珮綺懼害 A/D 杞鎹㈠櫒鍙堝彧鏈 32X 緋誨垪鎵嶆湁銆
瀵繪壘紿佺牬錛屽紩鍏 Flash 鎶鏈 闅忕潃 Flash 鎶鏈鐨勮繀閫熷彂灞曪紝 TI 鍏鍙鎬篃灝嗚繖涓鎶鏈寮曞叆 MSP430 緋誨垪涓銆傚湪 2000 騫 7 鏈堟帹鍑 F13X/F14X 緋誨垪錛屽湪 2001 騫 7 鏈堝埌 2002 騫村張鐩哥戶鎺ㄥ嚭 F41X 銆 F43X 銆 F44X 榪欎簺鍏ㄩ儴鏄 Flash 鍨嬪崟鐗囨満銆
F41X 鍗曠墖鏈烘槸鐩鍓嶅簲鐢ㄦ瘮杈冨箍鐨勫崟鐗囨満錛屽畠鏈 48 涓 I/O 鍙o紝 96 孌 LCD 椹卞姩銆 F43X 銆 F44X 緋誨垪鏄鍦 13X 銆 14X 鐨勫熀紜涓婏紝澧炲姞浜嗘恫鏅墮┍鍔ㄥ櫒錛屽皢椹卞姩 LCD 鐨勬墊暟鐢 3XX 緋誨垪鐨勬渶澶 120 孌靛炲姞鍒 160 孌點傚苟涓旂浉搴斿湴璋冩暣浜嗘樉紺哄瓨鍌ㄥ櫒鍦ㄥ瓨鍌ㄥ尯鍐呯殑鍦板潃錛屼負浠ュ悗鐨勫彂灞曟嫇灞曚簡絀洪棿銆
MSP430 緋誨垪鐢變簬鍏鋒湁 Flash 瀛樺偍鍣錛屽湪緋葷粺璁捐°佸紑鍙戣皟璇曞強瀹為檯搴旂敤涓婇兘琛ㄧ幇鍑鴻緝鏄庢樉鐨勪紭鐐廣傝繖鏄 TI 鍏鍙告帹鍑哄叿鏈 Flash 鍨嬪瓨鍌ㄥ櫒鍙 JTAG 杈圭晫鎵鎻忔妧鏈鐨勫粔浠峰紑鍙戝伐鍏 MSP-FET430X110 錛屽皢鍥介檯涓婂厛榪涚殑 JTAG 鎶鏈鍜 Flash 鍦ㄧ嚎緙栫▼鎶鏈寮曞叆 MSP430 銆
榪欑嶄互 Flash 鎶鏈涓 FET 寮鍙戝伐鍏風粍鍚堢殑寮鍙戞柟寮忥紝鍏鋒湁鏂逛究銆佸粔浠楓佸疄鐢ㄧ瓑浼樼偣錛岀粰鐢ㄦ埛鎻愪緵浜嗕竴涓杈冧負鐞嗘兂鐨勬牱鏈哄紑鍙戞柟寮忋
鍙﹀栵紝 2001 騫 TI 鍏鍙稿張鍏甯冧簡 BOOTSTRAP 鎶鏈錛屽埄鐢ㄥ畠鍙鍦ㄧ儳鏂鐔斾笣浠ュ悗鍙瑕佸嚑鏍圭嚎灝卞彲鏇存敼騫惰繍琛屽唴閮ㄧ殑紼嬪簭銆傝繖涓虹郴緇熻蔣浠剁殑鍗囩駭鎻愪緵浜嗗張涓鏂逛究鐨勬墜孌點 BOOTSTRAP 鍏鋒湁寰堥珮鐨勪繚瀵嗘э紝鍙d護鍙杈懼埌 32 涓瀛楄妭鐨勯暱搴︺
钃鍕冨彂灞曢樁孌 鍦ㄥ墠涓闃舵碉紝寮曡繘鏂版妧鏈鍜屽唴閮ㄨ繘琛岃皟鏁翠箣鍚庯紝涓 MSP430 鐨勫姛鑳芥墿灞曟墦涓嬩簡鑹濂界殑鍩虹銆備簬鏄 TI 鍏鍙稿湪 2002 騫村簳鍜 2003 騫存湡闂村張闄嗙畫鎺ㄥ嚭浜 F15X 鍜 F16X 緋誨垪鐨勪駭鍝併
鍦ㄨ繖涓鏂扮殑緋誨垪涓錛屾湁浜嗕袱涓鏂歸潰鐨勫彂灞曘備竴鏄浠庡瓨鍌ㄥ櫒鏂歸潰鏉ヨ達紝灝 RAM 瀹歸噺澶уぇ澧炲姞錛屽 F1611 鐨 RAM 瀹歸噺澧炲姞鍒頒簡 10KB 銆傝繖鏍蜂竴鏉ワ紝甯屾湜灝嗗疄鏃舵搷浣滅郴緇燂紙 RTOS 錛夊紩鍏 MSP430 鐨勶紝灝變笉浼氬洜 RAM 涓嶅熻屽彂鎰佷簡銆備簩鏄浠庡栧洿妯″潡鏉ヨ達紝澧炲姞浜 I 2 C 銆 DMA 銆 DAC12 鍜 SVS 絳夋ā鍧椼
鍦 2003 騫翠腑錛 TI 鍏鍙歌繕鎺ㄥ嚭浜嗕笓闂ㄧ敤浜庣數閲忚¢噺鐨 MSP430FE42X 鍜岀敤浜庢按琛ㄣ佹皵琛ㄣ佺儹琛ㄤ笂鐨勫叿鏈夋棤紓佷紶鎰熸ā鍧楃殑 MSP430FW42X 鍗曠墖鏈恆傛垜浠鐩鎬俊鐢變簬 MSP430 鐨勫紑鏀炬х殑鍩烘湰鏋舵瀯鍜屾柊鎶鏈鐨勫簲鐢錛屾柊鐨 MSP430 鐨勪駭鍝佸搧縐嶅繀灝嗕細涓嶆柇鍑虹幇銆
2銆 MSP430 鍗曠墖鏈虹殑鐗圭偣
MSP430 緋誨垪鍗曠墖鏈虹殑榪呴熷彂灞曞拰搴旂敤鑼冨洿鐨勪笉鏂鎵╁ぇ錛屼富瑕佸彇鍐充簬浠ヤ笅鐨勭壒鐐廣
寮哄ぇ鐨勫勭悊鑳藉姏 MSP430 緋誨垪鍗曠墖鏈烘槸涓涓 16 浣嶇殑鍗曠墖鏈猴紝閲囩敤浜嗙簿綆鎸囦護闆嗭紙 RISC 錛夌粨鏋勶紝鍏鋒湁涓板瘜鐨勫誨潃鏂瑰紡錛 7 縐嶆簮鎿嶄綔鏁板誨潃銆 4 縐嶇洰鐨勬搷浣滄暟瀵誨潃錛夈佺畝媧佺殑 27 鏉″唴鏍告寚浠や互鍙婂ぇ閲忕殑妯℃嫙鎸囦護錛涘ぇ閲忕殑瀵勫瓨鍣ㄤ互鍙婄墖鍐呮暟鎹瀛樺偍鍣ㄩ兘鍙鍙傚姞澶氱嶈繍綆楋紱榪樻湁楂樻晥鐨勬煡琛ㄥ勭悊鎸囦護錛涙湁杈冮珮鐨勫勭悊閫熷害錛屽湪 8MHz 鏅朵綋椹卞姩涓嬫寚浠ゅ懆鏈熶負 125 ns 銆傝繖浜涚壒鐐逛繚璇佷簡鍙緙栧埗鍑洪珮鏁堢巼鐨勬簮紼嬪簭銆
鍦ㄨ繍綆楅熷害鏂歸潰錛 MSP430 緋誨垪鍗曠墖鏈鴻兘鍦 8MHz 鏅朵綋鐨勯┍鍔ㄤ笅錛屽疄鐜 125ns 鐨勬寚浠ゅ懆鏈熴 16 浣嶇殑鏁版嵁瀹藉害銆 125ns 鐨勬寚浠ゅ懆鏈熶互鍙婂氬姛鑳界殑紜浠朵箻娉曞櫒錛堣兘瀹炵幇涔樺姞錛夌浉閰嶅悎錛岃兘瀹炵幇鏁板瓧淇″彿澶勭悊鐨勬煇浜涚畻娉曪紙濡 FFT 絳夛級銆
MSP430 緋誨垪鍗曠墖鏈虹殑涓鏂婧愯緝澶氾紝騫朵笖鍙浠ヤ換鎰忓祵濂楋紝浣跨敤鏃剁伒媧繪柟渚褲傚綋緋葷粺澶勪簬鐪佺數鐨勫囩敤鐘舵佹椂錛岀敤涓鏂璇鋒眰灝嗗畠鍞ら啋鍙鐢 6us 銆
瓚呬綆鍔熻 MSP430 鍗曠墖鏈轟箣鎵浠ユ湁瓚呬綆鐨勫姛鑰楋紝鏄鍥犱負鍏跺湪闄嶄綆鑺鐗囩殑鐢墊簮鐢靛帇鍙婄伒媧昏屽彲鎺х殑榪愯屾椂閽熸柟闈㈤兘鏈夊叾鐙鍒頒箣澶勩
棣栧厛錛 MSP430 緋誨垪鍗曠墖鏈虹殑鐢墊簮鐢靛帇閲囩敤鐨勬槸 1.8~3.6V 鐢靛帇銆傚洜鑰屽彲浣垮叾鍦 1MHz 鐨勬椂閽熸潯浠朵笅榪愯屾椂錛 鑺鐗囩殑鐢墊祦浼氬湪 200~400uA 宸﹀彸錛屾椂閽熷叧鏂妯″紡鐨勬渶浣庡姛鑰楀彧鏈 0.1uA 銆
鍏舵★紝鐙鐗圭殑鏃墮挓緋葷粺璁捐°傚湪 MSP430 緋誨垪涓鏈変袱涓涓嶅悓鐨勭郴緇熸椂閽熺郴緇燂細鍩烘湰鏃墮挓緋葷粺鍜岄攣棰戠幆錛 FLL 鍜 FLL+ 錛夋椂閽熺郴緇熸垨 DCO 鏁板瓧鎸鑽″櫒鏃墮挓緋葷粺銆傛湁鐨勪嬌鐢ㄤ竴涓鏅朵綋鎸鑽″櫒錛 32768Hz 錛 , 鏈夌殑浣跨敤涓や釜鏅朵綋鎸鑽″櫒錛夈傜敱緋葷粺鏃墮挓緋葷粺浜х敓 CPU 鍜屽悇鍔熻兘鎵闇鐨勬椂閽熴傚苟涓旇繖浜涙椂閽熷彲浠ュ湪鎸囦護鐨勬帶鍒朵笅錛屾墦寮鍜屽叧闂錛屼粠鑰屽疄鐜板規諱綋鍔熻楃殑鎺у埗銆
鐢變簬緋葷粺榪愯屾椂鎵撳紑鐨勫姛鑳芥ā鍧椾笉鍚岋紝鍗抽噰鐢ㄤ笉鍚岀殑宸ヤ綔妯″紡錛岃姱鐗囩殑鍔熻楁湁鐫鏄捐憲鐨勪笉鍚屻傚湪緋葷粺涓鍏辨湁涓縐嶆椿鍔ㄦā寮忥紙 AM 錛夊拰浜旂嶄綆鍔熻楁ā寮忥紙 LPM0~LPM4 錛夈傚湪絳夊緟鏂瑰紡涓嬶紝鑰楃數涓 0.7uA 錛屽湪鑺傜數鏂瑰紡涓嬶紝鏈浣庡彲杈 0.1uA 銆
緋葷粺宸ヤ綔紼沖畾 涓婄數澶嶄綅鍚庯紝棣栧厛鐢 DCOCLK 鍚鍔 CPU 錛屼互淇濊瘉紼嬪簭浠庢g『鐨勪綅緗寮濮嬫墽琛岋紝淇濊瘉鏅朵綋鎸鑽″櫒鏈夎凍澶熺殑璧鋒尟鍙婄ǔ瀹氭椂闂淬傜劧鍚庤蔣浠跺彲璁劇疆閫傚綋鐨勫瘎瀛樺櫒鐨勬帶鍒朵綅鏉ョ『瀹氭渶鍚庣殑緋葷粺鏃墮挓棰戠巼銆傚傛灉鏅朵綋鎸鑽″櫒鍦ㄧ敤鍋 CPU 鏃墮挓 MCLK 鏃跺彂鐢熸晠闅滐紝 DCO 浼氳嚜鍔ㄥ惎鍔錛屼互淇濊瘉緋葷粺姝e父宸ヤ綔錛涘傛灉紼嬪簭璺戦烇紝鍙鐢ㄧ湅闂ㄧ嫍灝嗗叾澶嶄綅銆
涓板瘜鐨勭墖涓婂栧洿妯″潡 MSP430 緋誨垪鍗曠墖鏈虹殑鍚勬垚鍛橀兘闆嗘垚浜嗚緝涓板瘜鐨勭墖鍐呭栬俱傚畠浠鍒嗗埆鏄鐪嬮棬鐙楋紙 WDT 錛夈佹ā鎷熸瘮杈冨櫒 A 銆佸畾鏃跺櫒 A 錛 Timer_A 錛夈佸畾鏃跺櫒 B 錛 Timer_B 錛夈佷覆鍙 0 銆 1 錛 USART0 銆 1 錛夈佺‖浠朵箻娉曞櫒銆佹恫鏅墮┍鍔ㄥ櫒銆 10 浣 /12 浣 ADC 銆 I 2 C 鎬葷嚎鐩存帴鏁版嵁瀛樺彇錛 DMA 錛夈佺鍙 O 錛 P0 錛夈佺鍙 1~6 錛 P1~P6 錛夈佸熀鏈瀹氭椂鍣錛 Basic Timer 錛夌瓑鐨勪竴浜涘栧洿妯″潡鐨勪笉鍚岀粍鍚堛傚叾涓錛岀湅闂ㄧ嫍鍙浠ヤ嬌紼嬪簭澶辨帶鏃惰繀閫熷嶄綅錛涙ā鎷熸瘮杈冨櫒榪涜屾ā鎷熺數鍘嬬殑姣旇緝錛岄厤鍚堝畾鏃跺櫒錛屽彲璁捐″嚭 A/D 杞鎹㈠櫒錛 16 浣嶅畾鏃跺櫒錛 Timer_A 鍜 Timer_B 錛夊叿鏈夋崟鑾 / 姣旇緝鍔熻兘錛屽ぇ閲忕殑鎹曡幏 / 姣旇緝瀵勫瓨鍣錛屽彲鐢ㄤ簬浜嬩歡璁℃暟銆佹椂搴忓彂鐢熴 PWM 絳夛紱鏈夌殑鍣ㄤ歡鏇村叿鏈夊彲瀹炵幇寮傛ャ佸悓姝ュ強澶氬潃璁塊棶涓茶岄氫俊鎺ュ彛鍙鏂逛究鐨勫疄鐜板氭満閫氫俊絳夊簲鐢錛涘叿鏈夎緝澶氱殑 I/O 絝鍙o紝鏈澶氳揪 6*8 鏉 I/O 鍙g嚎錛 P0 銆 P1 銆 P2 絝鍙h兘澶熸帴鏀跺栭儴涓婂崌娌挎垨涓嬮檷娌跨殑涓鏂杈撳叆錛 12/14 浣嶇‖浠 A/D 杞鎹㈠櫒鏈夎緝楂樼殑杞鎹㈤熺巼錛屾渶楂樺彲杈 200kbps 錛岃兘澶熸弧瓚沖ぇ澶氭暟鏁版嵁閲囬泦搴旂敤錛涜兘鐩存帴椹卞姩娑叉櫠澶氳揪 160 孌碉紱瀹炵幇涓よ礬鐨 12 浣 D/A 杞鎹錛涚‖浠 I 2 C 涓茶屾葷嚎鎺ュ彛瀹炵幇瀛樺偍鍣ㄤ覆琛屾墿灞曪紱浠ュ強涓轟簡澧炲姞鏁版嵁浼犺緭閫熷害錛岃岄噰鐢ㄧ洿鎺ユ暟鎹浼犺緭錛 DMA 錛夋ā鍧椼 MSP430 緋誨垪鍗曠墖鏈虹殑榪欎簺鐗囧唴澶栬句負緋葷粺鐨勫崟鐗囪В鍐蟲柟妗堟彁渚涗簡鏋佸ぇ鐨勬柟渚褲
鏂逛究楂樻晥鐨勫紑鍙戠幆澧 鐩鍓 MSP430 緋誨垪鏈 OPT 鍨嬨 FLASH 鍨嬪拰 ROM 鍨嬩笁縐嶇被鍨嬬殑鍣ㄤ歡錛岃繖浜涘櫒浠剁殑寮鍙戞墜孌典笉鍚屻傚逛簬 OPT 鍨嬪拰 ROM 鍨嬬殑鍣ㄤ歡鏄浣跨敤浠跨湡鍣ㄥ紑鍙戞垚鍔熶箣鍚庡湪鐑у啓鎴栨帺鑶滆姱鐗囷紱瀵逛簬 FLASH 鍨嬪垯鏈夊嶮鍒嗘柟渚跨殑寮鍙戣皟璇曠幆澧冿紝鍥犱負鍣ㄤ歡鐗囧唴鏈 JTAG 璋冭瘯鎺ュ彛錛岃繕鏈夊彲鐢墊摝鍐欑殑 FLASH 瀛樺偍鍣錛屽洜姝ら噰鐢ㄥ厛涓嬭澆紼嬪簭鍒 FLASH 鍐咃紝鍐嶅湪鍣ㄤ歡鍐呴氳繃杞浠舵帶鍒剁▼搴忕殑榪愯岋紝鐢 JTAG 鎺ュ彛璇誨彇鐗囧唴淇℃伅渚涜捐¤呰皟璇曚嬌鐢ㄧ殑鏂規硶榪涜屽紑鍙戙傝繖縐嶆柟寮忓彧闇瑕佷竴鍙 PC 鏈哄拰涓涓 JTAG 璋冭瘯鍣錛岃屼笉闇瑕佷豢鐪熷櫒鍜岀紪紼嬪櫒銆傚紑鍙戣璦鏈夋眹緙栬璦鍜 C 璇璦銆
MSP430 鍗曠墖鏈虹洰鍓嶄富瑕佷互 FLASH 鍨嬩負涓匯
閫傚簲宸ヤ笟綰ц繍琛岀幆澧 MSP430 緋誨垪鍣ㄤ歡鍧囦負宸ヤ笟綰х殑錛岃繍琛岀幆澧冩俯搴︿負 -40~+ 85 鎽勬皬搴 錛屾墍璁捐$殑浜у搧閫傚悎鐢ㄤ簬宸ヤ笟鐜澧冧笅銆
鈷 MAP430 緋誨垪涓 89C 51 緋誨垪鐨勬瘮杈
鎴戝浗鐨勫氭暟璇昏呭 89C 51 緋誨垪鐨勫崟鐗囨満鏄寰堢啛鎮夌殑錛屼負浜嗗姞娣卞 MSP430 緋誨垪鍗曠墖鏈虹殑璁よ瘑錛屾垜浠涓嶅Θ灝嗕袱鑰呰繘琛屼竴涓嬫瘮杈冦
棣栧厛錛 89C 51 鍗曠墖鏈烘槸 8 浣嶅崟鐗囨満銆傚叾鎸囦護鏄閲囩敤鐨勮縐頒負鈥 CISC 鈥濈殑澶嶆潅鎸囦護闆嗭紝鍏卞叿鏈 111 鏉℃寚浠ゃ傝 MSP430 鍗曠墖鏈烘槸 16 浣嶇殑鍗曠墖鏈猴紝閲囩敤浜嗙簿綆鎸囦護闆嗭紙 RISC 錛夌粨鏋勶紝鍙鏈夌畝媧佺殑 27 鏉℃寚浠わ紝澶ч噺鐨勬寚浠ゅ垯鏄妯℃嫙鎸囦護錛屼紬澶氱殑瀵勫瓨鍣ㄤ互鍙婄墖鍐呮暟鎹瀛樺偍鍣ㄩ兘鍙鍙傚姞澶氱嶈繍綆椼傝繖浜涘唴鏍告寚浠ゅ潎涓哄崟鍛ㄦ湡鎸囦護錛屽姛鑳藉己錛岃繍琛岀殑閫熷害蹇銆
鍏舵★紝 89C 51 鍗曠墖鏈烘湰韜鐨勭數婧愮數鍘嬫槸 5 浼忥紝鏈変袱縐嶄綆鍔熻楁柟寮忥細寰呮満鏂瑰紡鍜屾帀鐢墊柟寮忋傛e父鎯呭喌涓嬫秷鑰楃殑鐢墊祦涓 24mA 錛屽湪鎺夌數鐘舵佷笅錛屽叾鑰楃數鐢墊祦浠嶄負 3mA 錛涘嵆浣垮湪鎺夌數鏂瑰紡涓嬶紝鐢墊簮鐢靛帇鍙浠ヤ笅闄嶅埌 2V 錛屼絾鏄涓轟簡淇濆瓨鍐呴儴 RAM 涓鐨勬暟鎹錛岃繕闇瑕佹彁渚涚害 50uA 鐨勭數嫻併傝 MSP430 緋誨垪鍗曠墖鏈哄湪浣庡姛鑰楁柟闈㈢殑浼樿秺涔嬪勶紝鍒欐槸 89C 51 緋誨垪涓嶅彲姣旀嫙鐨勩傛e洜涓哄傛わ紝 MSP430 鏇撮傚悎搴旂敤浜庝嬌鐢ㄧ數奼犱緵鐢電殑浠鍣ㄣ佷華琛ㄧ被浜у搧涓銆
鍐嶈咃紝 89C 51 緋誨垪鍗曠墖鏈虹敱浜庡叾鍐呴儴鎬葷嚎鏄 8 浣嶇殑錛屽叾鍐呴儴鍔熻兘妯″潡鍩烘湰涓婇兘鏄 8 浣嶇殑鉶界劧緇忚繃鍚勭嶅姫鍔涘叾鍐呴儴鍔熻兘妯″潡鏈変簡鏄捐憲澧炲姞錛屼絾鏄鍙楀叾緇撴瀯鏈韜鐨勯檺鍒跺緢澶э紝灝ゅ叾妯℃嫙鍔熻兘閮ㄤ歡鐨勫炲姞鏇存樉鍥伴毦銆 MSP430 緋誨垪鍏跺熀鏈鏋舵瀯鏄 16 浣嶇殑錛屽悓鏃跺湪鍏跺唴閮ㄧ殑鏁版嵁鎬葷嚎緇忚繃杞鎹㈣繕瀛樺湪 8 浣嶇殑鎬葷嚎錛屽湪鍔犱笂鏈韜灝辨槸娣峰悎鍨嬬殑緇撴瀯錛屽洜鑰屽瑰畠榪欐牱鐨勫紑鏀懼瀷鐨勬灦鏋勬潵璇達紝鏃犺烘墿灞 8 浣嶇殑鍔熻兘妯″潡錛岃繕鏄 16 浣嶇殑鍔熻兘妯″潡錛屽嵆浣挎墿灞曟ā / 鏁拌漿鎹㈡垨鏁 / 妯¤漿鎹㈣繖綾葷殑鍔熻兘妯″潡涔熸槸寰堟柟渚跨殑銆傝繖涔熷氨鏄涓轟粈涔 MSP430 緋誨垪浜у搧鍜屽叾涓鍔熻兘閮ㄤ歡榪呴熷炲姞鐨勫師鍥犮
鏈鍚庯紝灝辨槸鍦ㄥ紑鍙戝伐鍏蜂笂闈銆傚逛簬 89C 51 鏉ヨ達紝鐢變簬瀹冩槸鏈鏃╄繘鍏ヤ腑鍥界殑鍗曠墖鏈猴紝浜轟滑瀵瑰畠鍦ㄧ啛鎮変笉榪囦簡錛屽啀鍔犱笂鎴戝浗鍚勬柟浜哄+鐨勫姫鍔涳紝鍒涢犱簡涓嶅皯閫傚悎鎴戜滑浣跨敤鐨勫紑鍙戝伐鍏楓備絾鏄濡備綍瀹炵幇鍦ㄧ嚎緙栫▼榪樻槸涓涓寰堝ぇ鐨勯棶棰樸傚逛簬 MSP430 緋誨垪鑰岃█錛岀敱浜庡紩榪涗簡 Flash 鍨嬬▼搴忓瓨鍌ㄥ櫒鍜 JTAG 鎶鏈錛屼笉浠呬嬌寮鍙戝伐鍏峰彉寰楃畝渚匡紝鑰屼笖浠鋒牸涔熺浉瀵逛綆寤夛紝騫朵笖榪樺彲浠ュ疄鐜板湪綰跨紪紼嬨
㈡ MSP430單片機用C語言編寫程序需要用什麼軟體
MSP430用IAREmbeddedWorkbench軟體編寫程序和編譯代碼。
MSP430單片機稱之為混合信號處理器,是由於其針對實際應用需求,將多個不同功能的模擬電路、數字電路模塊和微處理器集成在一個晶元上,以提供「單片機」解決方案。該系列單片機多應用於需要電池供電的攜帶型儀器儀表中。
(2)msp430單片機程序設計擴展閱讀:
MSP430系列部分產品具有快閃記憶體,在系統設計、開發、調試和實際應用中具有明顯優勢。TI公司引入了具有快閃記憶體和JTAG邊界掃描技術的廉價開發工具MSP-Fet430x110,並將國際先進的JTAG技術和Flash在線編程技術引入到MSP430中。
這種將Flash技術與FET開發工具相結合,具有方便、便宜、實用等優點,為用戶提供了更理想的原型開發方式。
㈢ 我想用單片機MSP430實現正弦信號采樣,採集256個點。採集結果在串口中顯示。怎麼用程序實現
#include <msp430x44x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//串口初始化
FLL_CTL0 |= XCAP18PF; // Configure load caps
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL1; // UCLK = SMCLK
UBR00 = 0x36; // 1MHz 19200
UBR10 = 0x00; // 1MHz 19200
UMCTL0 = 0x6B; // Molation
UCTL0 &= ~SWRST; // Initialize USART state machine
unsigned int adtable[256];
unsigned int i;
unsigned int AD_Times;
AD12Init();
ADC12CTL0 |= ENC ; //enable conversion
ADC12CTL0 |= ADC12SC; // Sampling open
while(1)
{
If (AD_Times==256)
{
for(i=0;i<256;i++)
{
TXBUF0 = adtable[i]; //Send by 2 Bytes
adtable[i]>>8;
TXBUF0 = adtable[i];
}
}
}
void AD12Init(void)
{
P6SEL |= 0x01; // P6.0 ADC option select
ADC12CTL0 &= ~ENC;
ADC12CTL0 = SHT0_6 + ADC12ON+MSC+REFON+REF2_5V; // set the register
ADC12CTL1 = SHP+CONSEQ_2; // Use sampling timer
ADC12MCTL0 = SREF_1+INCH_0
ADC12CTL0 |= ENC; // Conversion enabled
ADC12IE = 0x01; //interrupt
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR (void)
{
vu32 temp;
temp = ADC12MEM0;
adtable[AD_Times] = temp *2500/4095; // change to mv Value
AD_Times++;
if(AD_Times == 256)
{
ADC12CTL0 &= ~ENC;
ADC12CTL0 &= ~ADC12SC
}
應該是這個樣子的,沒調試過,有錯誤自己搞定吧
㈣ 如何用晶元MSP430和IAR軟體的C語言編一個流水燈程序
#include<msp430x14x.h>
#define uint unsigned int
delay(uint);
void main()
{
WDTCTL = 0x5A80;
uint ch[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uint i,j;
P2DIR = 0xff;
P2OUT = 0xff; //低電平點亮
while(1)
{
for(i=0;i<8;i++)
{
P2OUT = ch[i];
delay(50000);
}
for(j=6;j>0;j--)
{
P2OUT = ch[j];
delay(50000);
}
}
}
void delay(uint z)
{
uint a;
for(a=0;a<z;a++);
}
1.這是較為簡單的流水燈程序,沒有使用定時器,只是簡單的延時;
若要精確延時,需要設置定時器A或B.
2.也可以通過移位操作來實現流水燈,移位操作放入中斷內最好
㈤ 閲囩敤MSP430鍗曠墖鏈哄疄鐜扮數闃繪祴閲忕郴緇,鐢甸樆鑼冨洿涓0-1K.鐢↙CD 鏄劇ず嫻嬮噺緇撴灉,楹葷儲鎶婄紪鍐欑殑紼嬪簭鍐欏嚭鏉ワ紒錛侊紒
銆銆鍗曠墖鏈虹殑浣庡姛鑰楀疄鐜版柟寮忓彲浠ラ氳繃杞浠剁紪紼嬫潵瀹炵幇銆傘銆涓轟簡浣縈SP鏈澶ч檺搴︾殑杈懼埌浣庡姛鑰楋紝瀵逛簬MSP鏈浣跨敤鐨凣PIO鑰岃█錛屽簲璇ュ皢鍏惰劇疆涓鴻緭鍑猴紱鎴栬呮槸璁劇疆涓鴻緭鍏ワ紝浣嗘槸灝嗙¤剼鐨勭數騫沖滻瀹氾紝鍙浠ラ氳繃澶栭儴鐢佃礬灝嗙¤剼榪炴帴鑷砪c鎴栬匞ND,涔熷彲浣胯兘鍐呴儴涓婁笅鎷夌數闃伙紝灝嗙¤剼鐢靛鉤鍥哄畾銆傘銆瀵逛簬MSP鑰岃█錛屽ぇ閮ㄥ垎鎯呭喌涓嬶紝嫻嬮噺鍒扮殑鍔熻椾笌datasheet涓嶇﹀潎鏄鐢卞筂SP鏈浣跨敤鐨凣PIO澶勭悊涓嶅綋寮曡搗鐨勩傞粯璁ゆ儏鍐典笅錛孧SP鐨凣PIO鏄浣滀負杈撳叆鐨勶紝鍏剁瓑鏁堢數璺濡備笅鍥炬墍紺猴紝涓烘帹鎸芥ā寮忥細銆銆褰揋PIO綆¤剼閰嶇疆涓鴻緭鍏ョ¤剼涓斿栭儴鐢靛鉤澶勪簬嫻鍔ㄧ姸鎬佹椂(0<in<cc)錛岄偅涔堝唴閮ㄧ殑MOSFETs綆$殑瀵奸氱數嫻佹湰韜灝卞勪簬涓涓涓嶇ǔ瀹氱殑鍊礆紝浼氬艱嚧鏁翠綋鍔熻楃殑鍗囬珮錛岀ず鎰忓浘瑙佷笂鍥懼彸鍗婅竟銆傚彟澶栬繃楂樻垨榪囦綆鐨勬俯搴︽洿浼氬姞鍓ц繖縐嶄笉紼沖畾錛屼笖褰撲緵鐢電數鍘嬪崌楂樻椂錛屾湰韜玀OSFETs綆$殑瀵奸氱數嫻佷篃浼氬彉澶с傛晠鍦ㄩ珮鍘嬪拰浣庢俯鍙岄噸浣滅敤涓嬶紝灝變細鍑虹幇鍔熻楁攢鍗囩幇璞°傜‖涔嬪煄涓婇潰搴旇ユ湁榪欎釜鍨嬪彿錛屽彲浠ュ幓鐪嬬湅鏈夋病鏈夋暀紼嬩箣綾葷殑錛屼笉琛岀殑璇濆氨璇鋒暀涓嬪㈡湇鏈鐩存帴浜嗕竴瀵逛竴瑙e喅闂棰樸
㈥ MSP430單片機兩位數碼管程序
硬體介紹:
這里所用到的硬體資源包括8個數碼管、和msp430單片機的兩個8位IO口(這里用的是P3和P5口,如有改變,可以通過宏定義更改)。
數碼管是8個共陰的數碼管,a-h 8段通過一個200Ω的電阻接到430單片機的P5口。共陰端是由單片機的P3口控制,單片機的一位IO通過一個三極體接到數碼管的共陰端,以完成位選。
單片機的P3口時數碼管的位選口,某位為高則選中;P5口時段選口;要數碼管顯示時,通過P3位選,選中某個數碼管亮,P5段選選擇8段(a-h)中的那些亮,從而控制某一位顯示數字或字元。
要同時顯示多個數碼管,就要動態掃描;動態掃描時,本程序選用的是由看門狗的中斷掃描顯示:每1.9ms顯示其中的一位,動態掃描顯示每一位,從而讓數碼管看起來是同時亮的。
程序實現:
數碼管顯示首先要有一個數碼管顯示的斷碼表(完成數字和字元到數碼管段值的表),程序中採用了《MSP430系列單片機系統工程設計與實踐》這本書推薦的方式實現的這個數碼表:先用宏定義定義每段對應的單片機要輸出的段值,然後再實現是個表,當硬體改變時,只需更改前面的每段的段值定義即可,改動的地方少了很多,代碼如下:
/*宏定義,數碼管a-h各段對應的比特,更換硬體只用改動以下8行*/
#define a 0x01 // AAAA
#define b 0x02 // F B
#define c 0x04 // F B
#define d 0x08 // GGGG
#define e 0x10 // E C
#define f 0x20 // E C
#define g 0x40 // DDDD HH
#define h 0x80 //小數點
/*用宏定義自動生成段碼表,很好的寫法,值得學習*/
/*更換硬體無需重寫段碼表*/
const char Tab[] = {
a + b + c + d + e + f, // Displays "0"
b + c, // Displays "1"
a + b + d + e + g, // Displays "2"
a + b + c + d + g, // Displays "3"
b + c + f + g, // Displays "4"
a + c + d + f +g, // Displays "5"
a + c + d + e + f + g, // Displays "6"
a + b + c, // Displays "7"
a + b + c + d + e + f + g, // Displays "8"
a + b + c + d + f + g, // Displays "9"
a + b + c + e + f + g, // Displays "A"
c + d + e + f + g, // Displays "B"
a + d + e + f, // Displays "C"
b + c + d + e + g, // Displays "D"
a + d + e + f + g, // Displays "E"
a + e + f + g, // Displays "F"
a + c + d + e + f, // Displays "G"
b + c + e + f + g, // Displays "H"
e + f, // Displays "I"
b + c + d + e, // Displays "J"
b + d + e + f + g, // Displays "K"
d + e + f, // Displays "L"
a + c + e + g, // Displays "M"
a + b + c + e + f, // Displays "N"
c + e + g, // Displays "n"
c + d + e + g, // Displays "o"
a + b + c + d + e + f, // Displays "O"
a + b + e + f + g, // Displays "P"
a + b + c + f + g, // Displays "Q"
e + g, // Displays "r"
a + c + d + f +g, // Displays "S"
d + e + f + g, // Displays "t"
a + e + f , // Displays "T"
b + c + d + e + f, // Displays "U"
c + d + e, // Displays "v"
b + d + f + g, // Displays "W"
b + c + d + f + g, // Displays "Y"
a + b + d + e + g, // Displays "Z"
g, // Displays "-"
h, // Displays "."
0 // Displays " "
};
#undef a
#undef b
#undef c
#undef d
#undef e
#undef f
#undef g
0-9的位置對應顯示0-9,之後的是A開始往後顯示,為了方便訪問這個表格,定義了AA等一系列的常量,方便訪問這個表。
A從10開始訪問這個表格,如果要顯示A只需這樣用Tab[AA],即可得到需要的段值,AA-空格的宏定義放在H文件里,方便其他文件訪問(當要調用顯示函數的時候需要AA等宏定義)。為什麼是AA而不是A呢?主要原因是單字母的有幾個已經在單片機430的頭文件里定義了,為了訪問的時候一致,就都用兩個字母的了。
為了動態掃描,這里定義了一個全局數組(數碼管的程序可以訪問)Nixie[8]在這個裡面的8個char對應8個數碼管要顯示的段值。初始值是8個數碼管都不顯示:
char Nixie[8] = "\0\0\0\0\0\0\0\0"; //初始狀態 不顯示
動態掃描時,函數每1.9ms(設的看門狗定時中斷)調用一次顯示函數,每次顯示一位(為了讓中斷佔用更少的時間,這樣中斷里只需賦值即可)。函數如下:
void Display()
{
static char i = 0; //記錄掃描顯示到哪位
CTRL_OUT = 1<<i;
DATA_OUT = Nixie[i];
i++;
if(i>7)
i = 0;
}
這個函數供中斷調用,i用來保存要顯示哪一位。CTRL_OUT 、DATA_OUT 是宏定義的位選和段選口。中斷程序如下:
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR()
{
Display();
}
中斷只調用了一個函數,這樣很方便換其他中斷來定時。
中斷是必須初始設置的,還有IO口,要設為輸出方向 ,初始化函數完成數碼管用到的單片機資源的初始工作:
void NixiettubeInit()
{
WDTCTL = WDT_ADLY_1_9; //看門狗內部定時器模式16ms
IE1 |= WDTIE; //允許看門狗中斷
CTRL_DIR_OUT;
DATA_DIR_OUT;
}
首先,設置中斷並允許中斷;然後設置位選和段選所用的埠為輸出方向。CTRL_DIR_OUT; DATA_DIR_OUT; 和剛才用到的兩個OUT的宏定義如下:
#define DATA_DIR_OUT P5DIR|=0XFF
#define CTRL_DIR_OUT P3DIR|=0XFF
#define DATA_OUT P5OUT
#define CTRL_OUT P3OUT
這樣處理之後,要顯示數字就很簡單了:只需把要顯示的數字或字元的段碼值放入Nixie[8]數組對應的位置即可,如顯示韓輸入下:
void NixiettubeDisplayChar(char ch,char addr)
{
if(ch == DOT) //小數點,不需單獨佔一位
{
Nixie[addr] |= Tab[ch];
}
else
{
Nixie[addr] = Tab[ch];
}
}
如果是小數點,放入對應位置的h段即可,其他直接覆蓋。
插入字元函數:在最右端插入數字或字元.
void NixiettubeInsertChar(char ch)
{
if(ch == DOT) ////小數點,不需單獨佔一位
{
Nixie[0] |= Tab[ch];
return;
}
for(int i = 7;i > 0;i--)
Nixie[i] = Nixie[i - 1]; //已顯示字元左移一位
Nixie[0] = Tab[ch];
}
這個也是先判斷小數點,小數點直接放到h段,其他的,則要已顯示的左移再覆蓋最右一位,源程序的注釋很詳細,可具體才、可以下載附件的程序庫。
數碼管清除函數,這個函數把數碼管全部顯示去掉,即把緩存數組內每項都置為0:
void NixiettubeClear()
{
for(int i = 0;i < 8;i++)
Nixie[i] = Tab[SP]; //顯示空格
}
程序比較簡單,這里就不多解釋了。
數碼管的程序就這么多了,所有函數都列出來了。下面開始介紹printf的移植,具體過程不再詳細說了,詳細過程參考:MSP430程序庫<四>printf和scanf函數移植。這里主要介紹所需程序。
單片機printf使用需要用戶提供底層驅動-putchar函數,printf完成格式化等一系列活動後調用putchar輸出字元流。只要實現putchar,包含stdio.h文件,就可以使用printf函數。移植的數碼管的putchar函數如下:
#include <stdio.h>
#include "ctype.h" /*isdigit函數需要該頭文件*/
#include "Nixietube.h"
int putchar(int ch)
{
//'\f'表示走紙翻頁,相當於清除顯示
if(ch=='\n'||ch=='\r')
NixiettubeClear();
//數字和對應ASCII字母之間差0x30 '1'=0x31 '2'=0x32...
//isdigit也是C語言標准函數
if(isdigit(ch))
NixiettubeInsertChar(ch-0x30); //若字元是數字則顯示數字
else //否則,不是數字,是字母
{
switch(ch) //根據字母選擇程序分支
{
case 'A': case 'a': NixiettubeInsertChar(AA);break; //字元A
case 'B': case 'b': NixiettubeInsertChar(BB);break; //字元B
case 'C': case 'c': NixiettubeInsertChar(CC);break; //...
case 'D': case 'd': NixiettubeInsertChar(DD);break;
case 'E': case 'e': NixiettubeInsertChar(EE);break;
case 'F': case 'f': NixiettubeInsertChar(FF);break;
case 'G': case 'g': NixiettubeInsertChar(GG);break;
case 'H': case 'h': NixiettubeInsertChar(HH);break;
case 'I': case 'i': NixiettubeInsertChar(II);break;
case 'J': case 'j': NixiettubeInsertChar(JJ);break;
case 'K': case 'k': NixiettubeInsertChar(KK);break;
case 'L': case 'l': NixiettubeInsertChar(LL);break;
case 'M': case 'm': NixiettubeInsertChar(mm);break;
case 'N': NixiettubeInsertChar(NN);break;
case 'n': NixiettubeInsertChar(nn);break;
case 'O': NixiettubeInsertChar(OO);break;
case 'o': NixiettubeInsertChar(oo);break;
case 'P': case 'p': NixiettubeInsertChar(PP);break;
case 'Q': case 'q': NixiettubeInsertChar(QQ);break;
case 'R': case 'r': NixiettubeInsertChar(rr);break;
case 'S': case 's': NixiettubeInsertChar(SS);break;
case 'T': case 't': NixiettubeInsertChar(tt);break;
case 'U': case 'v': NixiettubeInsertChar(UU);break;
case 'V': case 'u': NixiettubeInsertChar(VV);break;
case 'W': case 'w': NixiettubeInsertChar(WW);break;
case 'Y': case 'y': NixiettubeInsertChar(YY);break; //...
case 'Z': case 'z': NixiettubeInsertChar(ZZ);break; //字元Z
case '-': NixiettubeInsertChar(NEG);break;//字元-
case '.': NixiettubeInsertChar(DOT);break;//小數點,直接顯示在右下角
case ' ': NixiettubeInsertChar(SP);break; //空格
default : NixiettubeInsertChar(SP);break;//顯示不出來的字母用空格替代
}
}
return(ch); //返回顯示的字元(putchar函數標准格式要求返回顯示字元)
}
頭文件必須包含stdio.h,這樣告訴編譯器printf調用時,用這里的putchar函數。然後判斷字元,分類進行顯示,不能顯示的空一格。
數碼管的程序就完成了,如果需要可以自己添加改寫函數,如:當和鍵盤共同使用時,如果鍵盤移植了scanf函數,並且支持退格;可以改寫函數-讓數碼管的putchar支持退格操作。或者用的是我的鍵盤程序,需要10多ms調用一次鍵盤處理函數,這樣可以和這個數碼管掃描公用一個中斷:
void Display()
{
static char i = 0; //記錄掃描顯示到哪位
CTRL_OUT = 1<<i;
DATA_OUT = Nixie[i];
i++;
if(i>7)
{
i = 0;
KeyProcess();
}
}
這樣改寫,然後把鍵盤的中斷去掉(別忘了key.h包含和加入KeyProcess(); 的聲明;如果程序中有兩個指向同一個中斷時,會編譯錯誤);這樣就可以鍵盤、和數碼管共同使用了。
使用示例:
使用方法還是和之前一樣,工程中加入Nixietube.c文件,然後在要調用的地方加入Nixietube.h的包含;如puchr函數,和示例工程的main.c
main.c調用的方式如下:
#include <msp430x16x.h>
#include <stdio.h>
#include "Nixietube.h"
void ClkInit()
{
char i;
BCSCTL1 &= ~XT2OFF; //打開XT2振盪器
IFG1&=~OFIFG; //清除振盪錯誤標志
while((IFG1&OFIFG)!=0)
{
for(i=0;i<0xff;i++);
IFG1&=~OFIFG; //清除振盪錯誤標志
}
BCSCTL2 |= SELM_2+SELS+DIVS_3; //MCLK為8MHz,SMCLK為1MHz
}
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
ClkInit();
NixiettubeInit();
_EINT();
//while(1)
{
NixiettubeDisplayChar(AA,5);
NixiettubeDisplayChar(DOT,5);
NixiettubeInsertChar(2);
NixiettubeInsertChar(DOT);
NixiettubeInsertChar(2);
printf("%1.2f",1.2);
}
}
包含msp430的頭文件,以便使用430單片機的先關資源;加入stdio.h以使用printf函數;加入Nixietube.h使用數碼管的相關程序。
還要注意,為了數碼管正常顯示,必須打開總中斷,以使數碼管動態掃描顯示。另外,本程序單步調試看不到數碼管正常顯示,因為沒有掃描。只有全速運行才可以看到數碼管的顯示情況。
通過以上的設置,就可通過MSP430來控制兩位數碼管顯示任意的字元。
㈦ MSP430 怎麼編程
MSP430-FFTB6638 你要說明單片機的型號。
都屬於MSP430系列的,大致使用起來就不會差很多,有些寄存器命名、包含模塊多少等區別。
P4DIR|=BIT1+BIT2+BIT3:這句是將P4.1 P4.2 P4.3這3個IO口的方向置為輸出。
MSP430不同於51,需要先設置輸入輸出方向,然後才能做輸出或輸入使用。
如:
P4DIR |= BIT1;
P4OUT |= BIT1; //這兩句作用是讓P4.1口輸出1。
㈧ 寫一個程序,msp430單片機控制,定義p1.0為輸入口,p1.1為輸出口,輸入高電平時就輸出高電平
#include <msp430x41x.h> //系統文件夾內找
#include "main.h" //當前文件夾內找
main( void )
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer to prevent time out reset
Sys_Init();
while(1)
{
if((P1IN&BIT0) == BIT0)
P1OUT |= BIT1;
else
P1OUT &= ^BIT1;
}
}
/*****************************************************************************
* SYS初始化 *
*****************************************************************************/
void Sys_Init(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
/*時鍾初始化 //MCLK:2031616Hz*/
FLL_CTL0 |= XCAP14PF; // Configure load caps
SCFI0 |= FN_2; //頻率范圍
SCFQCTL =30; //N,如不設置默認=31
SCFI0 |= FLLD_2; //D=2,PUC後的默認值=2
//FLL_CTL1 |= FLL_DIV_4; //4分頻,P1.5輸出:f=32768/4
FLL_CTL0 |= DCOPLUS;//在MCLK前分頻 f=D*(N+1)*faclk,2*(30+1)*32768=2031616Hz
/*埠初始化*/
P1DIR |= BIT1 + BIT2 + BIT3+ BIT4+ BIT5 + BIT6+ BIT7;
}