导航:首页 > 编程语言 > msp430单片机程序设计

msp430单片机程序设计

发布时间:2024-05-12 00:36:29

㈠ 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;
}

阅读全文

与msp430单片机程序设计相关的资料

热点内容
wordpress制作单页网站导航页面 浏览:277
什么海外网站可以看限制片 浏览:596
指尖见app在哪里下载 浏览:367
java聊天室课程设计 浏览:670
responsejavascript 浏览:71
如何从杀毒软件里面恢复出文件 浏览:972
越狱iphone如何备份 浏览:124
苹果四S万能钥匙怎么破不开 浏览:603
网络打印机共享怎么连接 浏览:313
fme系统找不到指定文件 浏览:301
iphoneid和密码忘了怎么办 浏览:238
苹果电脑优盘里的文件如何加密 浏览:284
word标题名和文件名一致 浏览:957
excel修改后的文件保持了怎么恢复 浏览:340
社保网络认证怎么弄 浏览:92
苹果手机怎么传数据到新手机相册 浏览:50
5s升级ios92无服务 浏览:354
ubuntu翻译工具 浏览:665
wifi安装教程 浏览:398
苹果有些qq文件打不开 浏览:139

友情链接