Gianluigi Buffon saved a late penalty and Juventus took a big step toward a fifth consecutive Serie A title with a 2-1 win at Fiorentina on Sunday.

If Napoli fails to win at Roma on Monday, Juventus will have sealed the Italian league championship with three matches to spare.

Substitute Alvaro Morata scored the winner, seconds after Nikola Kalinic had equalized for Fiorentina late in the second half. Buffon then stopped Kalinic's spot kick in the 90th.

More from FoxSports

Mario Mandzukic had put Juve ahead with a volley in the first half after being set up by Sami Khedira and Paul Pogba.

Mandzukic has scored in four of Juve's last five matches, while Pogba has provided the assist for six of the Bianconeri's last 13 goals in the league.

Morata's winner came on a rebound after Milan Badelj cleared off the line.

Kalinic earned a penalty for a debatable foul by Juan Cuadrado and had his poor spot kick blocked by Buffon, who at 38 is having one of his best seasons.

In a frenetic finish, Kalinic hit the crossbar with a header from close range in stoppage time.

In the first half, Fiorentina protested over a goal that was ruled out for offside, with replays showing that Federico Bernardeschi was onside when he put the ball in the net.

Juventus moved 12 points clear of Napoli, while Fiorentina remained fifth.

Earlier, Palermo won 2-0 at Frosinone to boost its chances of avoiding relegation in a turbulent season featuring nine coaching changes.

Alberto Gilardino put Palermo ahead with a header early in the second half and Macedonia international Aleksandar Trajkovski sealed the result in stoppage time with a solo counterattack.

In 18th place, Palermo is level with 17th-place Carpi on points ahead of Carpi's match against Empoli on Monday.

Palermo hadn't won in exactly three months, since a 4-1 victory over Udinese on Jan. 24.

"We showed that we're still alive," said Gilardino, a member of the Italy squad that won the World Cup a decade ago. "Now we've got three finals to play."

Davide Ballardini was rehired earlier this month for his second stint in charge of Palermo this season.

Counting caretakers, Palermo has had seven different coaches this season: Giuseppe Iachini (twice), Ballardini (twice), Fabio Viviani, Guillermo Schelotto, Giovanni Bosi, Giovanni Tedesco and Walter Novellino.

Palermo president Maurizio Zamparini has made almost 60 coaching changes in 29 years as a club owner, first at Venezia and then at Palermo.

Frosinone is 19th, two points behind Carpi and Palermo -- with the bottom three in the 20-team league to be relegated.

Last-place Hellas Verona is 10 points from safety ahead of its match against AC Milan on Monday.

Three rounds remain.

Elsewhere, seventh-place Sassuolo moved within one point of Milan with a 3-1 win at Torino. Nicola Sansone, Federico Peluso and Marcello Trotta scored for the visitors, who still have a chance of a Europa League spot.

Chievo Verona remained one position behind Sassuolo despite a 1-0 loss to 10-man Atalanta, with Marco Borriello scoring to mathematically ensure another season in the top flight for the Bergamo side.

Lazio is ninth after a 2-1 loss at Sampdoria. After Filip Djordjevic gave Lazio an early lead, Fernando and Modibo Diakite responded for Samp.

Also, Emanuele Giaccherini and Sergio Floccari scored for Bologna in a 2-0 win over Genoa, boosting Roberto Donadoni's chances of coaching his squad to safety.

Donadoni has put himself in the running for a second stint as Italy coach with Antonio Conte having signed to manage Chelsea after the European Championship.

MORE FROM FOX SOCCER